Middle
Ce handler de finalizare ai scris?
sobes.tech AI
Răspuns de la AI
Am scris numeroase handler-uri de finalizare pentru diferite sarcini, inclusiv:
- Procesarea rezultatelor solicitărilor de rețea (obținerea datelor, starea de execuție).
- Operații asincrone cu baze de date (salvare, citire, actualizare).
- Operații ale sistemului de fișiere (citire, scriere, ștergere).
- Animații și interfețe de utilizator (finalizarea animațiilor, gestionarea gesturilor utilizatorului).
- Operații asincrone personalizate cu posibilitatea de a transmite rezultate și erori.
De exemplu, când lucrez cu URLSession, folosesc adesea acest model:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Tratarea erorii
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Tratarea răspunsului sau datelor nevalide
completion(.failure(URLError(.badServerResponse)))
return
}
// Procesarea cu succes a datelor
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Tratarea erorii de decodare
completion(.failure(error))
}
}.resume()
unde completion este o închidere de tip (Result<SomeModel, Error>) -> Void. Utilizarea Result permite o diferențiere clară între finalizarea cu succes și eroare.