Wat zijn de verschillen tussen het gebruik van async/await en voltooiingshandlers bij het werken met asynchrone code?
sobes.tech AI
Antwoord van AI
De belangrijkste verschillen tussen async/await en voltooiingshandlers bij het werken met asynchrone code in iOS:
-
Syntax en leesbaarheid: async/await maakt het mogelijk om asynchrone code in een sequentiële stijl te schrijven, wat de leesbaarheid verbetert en het debuggen vereenvoudigt. Voltooiingshandlers gebruiken geneste closures, wat kan leiden tot een "callback hel".
-
Foutafhandeling: met async/await kan de gebruikelijke try/catch-mechanisme worden gebruikt om fouten af te handelen, terwijl fouten bij voltooiingshandlers meestal via parameters worden doorgegeven, wat extra controle vereist.
-
Compatibiliteit: async/await wordt ondersteund in Swift vanaf versie 5.5 en iOS 15, terwijl voltooiingshandlers op alle versies werken.
Voorbeeld met 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 ontvangen: \(data)")
} catch {
print("Fout: \(error)")
}
}
Voorbeeld met voltooiingshandler:
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 ontvangen: \(data)")
case .failure(let error):
print("Fout: \(error)")
}
}
Kortom, async/await vereenvoudigt het werken met asynchrone code, waardoor het begrijpelijker en handiger wordt.