Sobes.tech
Middle

Quel gestionnaire de complétion avez-vous écrit?

sobes.tech IA

Réponse de l'IA

Exemple de gestionnaire de complétion pour une requête réseau avec erreurs possibles :

// Définir un type pour le résultat de la requête (succès ou erreur)
typealias RequestResult<T: Codable> = Result<T, Error>

// Fonction pour effectuer une requête réseau
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
    // Dans ce bloc, généralement, on effectue l'appel à URLSession.shared.dataTask
    // avec gestion de la réponse, décodage JSON et erreurs.

    // Exemple de traitement (supposons une réponse réussie et des données)
    let sampleData = Data() // Ici, les données réelles devraient être présentes
    let decoder = JSONDecoder()

    do {
        let decodedData = try decoder.decode(T.self, from: sampleData)
        completion(.success(decodedData)) // Appeler la completion avec succès
    } catch {
        completion(.failure(error)) // Appeler la completion avec une erreur si le décodage échoue
    }

    // Exemple de gestion d'erreur réseau ou serveur
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Appeler la completion avec erreur réseau
}

// Exemple d'utilisation :
struct SampleData: Codable {
    let id: Int
    let name: String
}

let apiUrl = URL(string: "https://api.example.com/data")!

performRequest(url: apiUrl) { result in
    switch result {
    case .success(let data):
        print("Succès ! Données reçues : \(data)")
    case .failure(let error):
        print("Erreur de requête : \(error.localizedDescription)")
    }
}