Middle
Koji ste završni handler napisali?
sobes.tech АИ
Одговор од АИ
Napisao sam mnogo handlera za završetak za različite zadatke, uključujući:
- Obradu rezultata mrežnih zahteva (dobijanje podataka, status izvršenja).
- Asinhrone operacije sa bazama podataka (čuvanje, čitanje, ažuriranje).
- Operacije fajl sistema (čitanje, pisanje, brisanje).
- Animacije i korisnički interfejsi (završetak animacija, obrada gestova korisnika).
- Prilagođene asinhrone operacije sa mogućnošću prenosa rezultata i grešaka.
Na primer, kada radim sa URLSession, često koristim ovaj obrazac:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Obrada greške
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Obrada nevažećeg odgovora ili podataka
completion(.failure(URLError(.badServerResponse)))
return
}
// Uspešna obrada podataka
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Obrada greške dekodiranja
completion(.failure(error))
}
}.resume()
gde je completion closure tipa (Result<SomeModel, Error>) -> Void. Korišćenje Result omogućava jasnu razliku između uspešnog završetka i greške.