Middle
Qual gestore di completamento hai scritto?
sobes.tech AI
Risposta dell'AI
Ho scritto numerosi gestori di completamento per vari compiti, tra cui:
- Elaborazione dei risultati delle richieste di rete (recupero dati, stato di esecuzione).
- Operazioni asincrone con database (salvataggio, lettura, aggiornamento).
- Operazioni del sistema di file (lettura, scrittura, eliminazione).
- Animazioni e interfacce utente (completamento animazioni, gestione dei gesti utente).
- Operazioni asincrone personalizzate con trasmissione di risultati ed errori.
Ad esempio, quando lavoro con URLSession, uso spesso questo modello:
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Gestione errore
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Gestione risposta o dati non validi
completion(.failure(URLError(.badServerResponse)))
return
}
// Elaborazione dati riuscita
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Gestione errore di decodifica
completion(.failure(error))
}
}.resume()
dove completion è una closure di tipo (Result<SomeModel, Error>) -> Void. L'uso di Result permette di distinguere chiaramente tra successo e errore.