Middle
Welke completion handler heb je geschreven?
sobes.tech AI
Antwoord van AI
Ik heb talloze completion handlers geschreven voor verschillende taken, waaronder:
- Verwerking van resultaten van netwerkverzoeken (gegevens ophalen, uitvoeringsstatus).
- Asynchrone operaties met databases (opslaan, lezen, bijwerken).
- Besturingssysteemoperaties (lezen, schrijven, verwijderen).
- Animaties en gebruikersinterfaces (voltooien van animaties, verwerken van gebruikersgebaren).
- Aangepaste asynchrone operaties met de mogelijkheid om resultaten en fouten door te geven.
Bijvoorbeeld, bij het werken met URLSession gebruik ik vaak dit patroon:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Foutafhandeling
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Afhandeling van ongeldige reactie of gegevens
completion(.failure(URLError(.badServerResponse)))
return
}
// Succesvolle verwerking van gegevens
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Fout bij decodering
completion(.failure(error))
}
}.resume()
waar completion een closure is van het type (Result<SomeModel, Error>) -> Void. Het gebruik van Result maakt een duidelijke scheiding mogelijk tussen succesvolle afronding en fouten.