Middle
Aký ste napísali handler dokončenia?
sobes.tech AI
Odpoveď od AI
Napísal som mnoho handlerov na dokončenie pre rôzne úlohy, vrátane:
- Spracovanie výsledkov sieťových požiadaviek (získanie dát, stav vykonávania).
- Asynchrónne operácie s databázami (uloženie, čítanie, aktualizácia).
- Operácie súborového systému (čítanie, zápis, mazanie).
- Animácie a používateľské rozhrania (ukončenie animácií, spracovanie gest používateľa).
- Vlastné asynchrónne operácie s možnosťou prenosu výsledkov a chýb.
Napríklad, pri práci s URLSession často používam tento vzor:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Spracovanie chyby
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Spracovanie neplatnej odpovede alebo dát
completion(.failure(URLError(.badServerResponse)))
return
}
// Úspešné spracovanie dát
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Spracovanie chyby dekódovania
completion(.failure(error))
}
}.resume()
kde completion je closure typu (Result<SomeModel, Error>) -> Void. Použitie Result umožňuje jasne rozlíšiť medzi úspešným ukončením a chybou.