Middle
Quel gestionnaire de complétion avez-vous écrit?
sobes.tech IA
Réponse de l'IA
J'ai écrit de nombreux gestionnaires de complétion pour diverses tâches, notamment :
- Traitement des résultats des requêtes réseau (obtention des données, statut d'exécution).
- Opérations asynchrones avec la base de données (sauvegarde, lecture, mise à jour).
- Opérations du système de fichiers (lecture, écriture, suppression).
- Animations et interfaces utilisateur (fin d'animation, gestion des gestes utilisateur).
- Opérations asynchrones personnalisées avec transmission de résultats et d'erreurs.
Par exemple, lors de l'utilisation de URLSession, j'utilise souvent ce modèle :
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
// Traitement de l'erreur
completion(.failure(error))
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode),
let data = data else {
// Traitement de la réponse ou des données non valides
completion(.failure(URLError(.badServerResponse)))
return
}
// Traitement réussi des données
do {
let model = try JSONDecoder().decode(SomeModel.self, from: data)
completion(.success(model))
} catch {
// Traitement de l'erreur de décodage
completion(.failure(error))
}
}.resume()
où completion est une closure de type (Result<SomeModel, Error>) -> Void. L'utilisation de Result permet de distinguer clairement la réussite de l'échec.