Millised on erinevused async/await ja completion handlers kasutamisel asünkroonse koodi töötamisel?
sobes.tech AI
Vastus AI-lt
Peamised erinevused async/await ja completion handlers vahel iOS-is asünkroonse koodi töötamisel:
-
Süntaks ja loetavus: async/await võimaldab kirjutada asünkroonset koodi järjestusstiilis, mis parandab loetavust ja lihtsustab silumist. Completion handlers kasutavad sisseehitatud sulgusid, mis võivad viia "callback hell".
-
Vigade käsitlemine: async/await abil saab kasutada tavalist try/catch mehhanismi vigade käsitlemiseks, samas kui completion handlers'ites edastatakse vead tavaliselt parameetrite kaudu, mis nõuab täiendavat kontrolli.
-
Ühilduvus: async/await toetatakse Swiftis alates versioonist 5.5 ja iOS 15-st, samas kui completion handlers töötavad kõigis versioonides.
Näide async/await kasutamisega:
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("Andmed saadud: \(data)")
} catch {
print("Viga: \(error)")
}
}
Näide completion handleriga:
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("Andmed saadud: \(data)")
case .failure(let error):
print("Viga: \(error)")
}
}
Seega, async/await lihtsustab asünkroonse koodi töötamist, muutes selle arusaadavamaks ja mugavamaks.