Middle
Jaký jste napsali completion handler?
sobes.tech AI
Odpověď od AI
Napsal jsem mnoho handlerů pro dokončení různých úkolů, včetně:
- Zpracování výsledků síťových požadavků (získání dat, stav provádění).
- Asynchronní operace s databázemi (uložení, čtení, aktualizace).
- Operace souborového systému (čtení, zápis, mazání).
- Animace a uživatelská rozhraní (dokončení animací, zpracování gest uživatele).
- Vlastní asynchronní operace s možností přenosu výsledků a chyb.
Například při práci s URLSession často používám tento vzor:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Zpracování chyby
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Zpracování neplatné odpovědi nebo dat
completion(.failure(URLError(.badServerResponse)))
return
}
// Úspěšné zpracování dat
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Zpracování chyby dekódování
completion(.failure(error))
}
}.resume()
kde completion je closure typu (Result<SomeModel, Error>) -> Void. Použití Result umožňuje jasně rozlišit úspěšné dokončení a chybu.