Sobes.tech
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()

completion est une closure de type (Result<SomeModel, Error>) -> Void. L'utilisation de Result permet de distinguer clairement la réussite de l'échec.