Кадоме фарқият байни истифодаи async/await ва handlers-и анҷом дар кор бо коди асинхронӣ?
sobes.tech AI
Ҷавоб аз AI
Асосӣ фарқиятҳо байни async/await ва ҳаллиҳои анҷомёбӣ дар кор бо коди асинхронӣ дар iOS:
-
Синтаксис ва хонданӣ: async/await имкон медиҳад, ки коди асинхрониро дар услуби пайдарпай нависед, ки хонданро беҳтар мекунад ва таҳлилро осонтар мекунад. Ҳаллиҳои анҷомёбӣ истифодаи пӯшидаҳои дарунӣ доранд, ки метавонад ба "аҳволи кабӯт" оварда расонад.
-
Идоракунии хатоҳо: бо async/await, шумо метавонед механизми муқаррарии try/catch-ро барои идоракунии хатоҳо истифода баред, дар ҳоле ки дар ҳаллиҳои анҷомёбӣ, хатоҳо одатан тавассути параметрҳо интиқол дода мешаванд, ки талаб мекунад, ки санҷишҳои иловагӣ анҷом дода шаванд.
-
Масъулият: async/await дар Swift аз нусхаи 5.5 ва iOS 15 дастгирӣ мешавад, дар ҳоле ки ҳаллиҳои анҷомёбӣ дар ҳама нусхаҳо кор мекунанд.
Масалан бо async/await:
func fetchData() async throws -> Data {
let url = URL(string: "https://example.com/data")!
let (data, _) = try await URLSession.shared.data(from: url)
return data
}
Task {
do {
let data = try await fetchData()
print("Даттаҳои қабулшуда: \(data)")
} catch {
print("Хатогӣ: \(error)")
}
}
Масалан бо ҳалли анҷомёбӣ:
func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
let url = URL(string: "https://example.com/data")!
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
completion(.failure(error))
return
}
if let data = data {
completion(.success(data))
}
}.resume()
}
fetchData { result in
switch result {
case .success(let data):
print("Даттаҳои қабулшуда: \(data)")
case .failure(let error):
print("Хатогӣ: \(error)")
}
}
Ин усул асинхронро содда мекунад, онро фаҳмонда ва истифодаи онро қулайтар месозад.