Sobes.tech
Middle

Aký ste napísali handler dokončenia?

sobes.tech AI

Odpoveď od AI

Príklad handlera ukončenia pre sieťovú požiadavku s možnými chybami:

// Definujeme typ pre výsledok požiadavky (úspech alebo chyba)
typealias RequestResult<T: Codable> = Result<T, Error>

// Funkcia na vykonanie siete požiadavky
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
    // V tomto bloku sa zvyčajne volá URLSession.shared.dataTask
    // s spracovaním odpovede, dekódovaním JSON a chybami.

    // Príklad spracovania (predpokladajme, že bola prijatá úspešná odpoveď a dáta)
    let sampleData = Data() // Tu by mali byť skutočné dáta
    let decoder = JSONDecoder()

    do {
        let decodedData = try decoder.decode(T.self, from: sampleData)
        completion(.success(decodedData)) // Voláme completion s úspechom
    } catch {
        completion(.failure(error)) // Voláme completion s chybou, ak dekódovanie zlyhá
    }

    // Príklad spracovania chyby siete alebo servera
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Voláme completion s chybou siete
}

// Príklad použitia:
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("Úspech! Prijaté dáta: \(data)")
    case .failure(let error):
        print("Chyba požiadavky: \(error.localizedDescription)")
    }
}