Sobes.tech
Middle

Welke voltooiingsafhandelaar heb je geschreven?

sobes.tech AI

Antwoord van AI

Voorbeeld van een completion handler voor een netwerkverzoek met mogelijke fouten:

// Definieer een type voor het resultaat van het verzoek (succes of fout)
typealias RequestResult<T: Codable> = Result<T, Error>

// Functie om een netwerkverzoek uit te voeren
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
    // In dit blok wordt meestal de call naar URLSession.shared.dataTask gedaan
    // met verwerking van de response, JSON decoding en fouten.

    // Voorbeeld van verwerking (stel dat er een succesvolle response en data is)
    let sampleData = Data() // Hier zouden echte data moeten zijn
    let decoder = JSONDecoder()

    do {
        let decodedData = try decoder.decode(T.self, from: sampleData)
        completion(.success(decodedData)) // Roep completion aan met succes
    } catch {
        completion(.failure(error)) // Roep completion aan met fout als decoding mislukt
    }

    // Voorbeeld van netwerk- of serverfoutafhandeling
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Roep completion aan met netwerkfout
}

// Voorbeeld van gebruik:
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("Succes! Ontvangen data: \(data)")
    case .failure(let error):
        print("Fout bij verzoek: \(error.localizedDescription)")
    }
}