Kādi ir atšķirības starp async/await un completion handlers izmantošanu darbā ar asīnhrono kodu?
sobes.tech AI
Atbilde no AI
Galvenās atšķirības starp async/await un completion handlers, strādājot ar asīnhrono kodu iOS:
-
Sintakse un lasāmība: async/await ļauj rakstīt asīnhrono kodu secīga stila, kas uzlabo lasāmību un vienkāršo atkļūdošanu. Completion handlers izmanto iekļautas slēdzenes, kas var novest pie "callback hell".
-
Kļūdu apstrāde: ar async/await var izmantot ierasto try/catch mehānismu kļūdu apstrādei, kamēr completion handlers kļūdas parasti tiek nodotas caur parametriem, kas prasa papildu pārbaudi.
-
Saderība: async/await tiek atbalstīts Swift no versijas 5.5 un iOS 15, kamēr completion handlers darbojas visās versijās.
Piemērs ar 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("Saņemti dati: \(data)")
} catch {
print("Kļūda: \(error)")
}
}
Piemērs ar completion handler:
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("Saņemti dati: \(data)")
case .failure(let error):
print("Kļūda: \(error)")
}
}
Tādējādi, async/await atvieglo darbu ar asīnhrono kodu, padara to saprotamāku un ērtāku.