Middle
Kādu pabeigšanas apstrādātāju jūs uzrakstījāt?
sobes.tech AI
Atbilde no AI
Esmu uzrakstījis daudz pabeigšanas apstrādātāju dažādiem uzdevumiem, tostarp:
- Tīkla pieprasījumu rezultātu apstrādi (datu iegūšanu, izpildes statusu).
- Asinhronas operācijas ar datu bāzēm (glabāšanu, lasīšanu, atjaunināšanu).
- Failu sistēmas operācijas (lasīšanu, rakstīšanu, dzēšanu).
- Animācijas un lietotāja saskarnes (animāciju pabeigšanu, lietotāja žestu apstrādi).
- Personalizētas asinhronas operācijas ar rezultātu un kļūdu nodošanas iespēju.
Piemēram, strādājot ar URLSession, bieži izmantoju šo paraugu:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Kļūdas apstrāde
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Nederīga atbilde vai dati
completion(.failure(URLError(.badServerResponse)))
return
}
// Datu veiksmīga apstrāde
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Dekodēšanas kļūdas apstrāde
completion(.failure(error))
}
}.resume()
kur completion ir (Result<SomeModel, Error>) -> Void tipa aizvērums. Result izmantošana ļauj skaidri atšķirt veiksmīgu pabeigšanu un kļūdu.