Sobes.tech
Middle

Ce handler de finalizare ai scris?

sobes.tech AI

Răspuns de la AI

Exemplu de handler de completare pentru o solicitare de rețea cu posibile erori:

// Definim un tip pentru rezultatul solicitării (succes sau eroare)
typealias RequestResult<T: Codable> = Result<T, Error>

// Funcție pentru efectuarea unei solicitări de rețea
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
    // În acest bloc, de obicei, se face apelul la URLSession.shared.dataTask
    // cu gestionarea răspunsului, decodarea JSON și erorile.

    // Exemplu de gestionare (să presupunem că s-a primit un răspuns de succes și date)
    let sampleData = Data() // Aici ar trebui să fie date reale
    let decoder = JSONDecoder()

    do {
        let decodedData = try decoder.decode(T.self, from: sampleData)
        completion(.success(decodedData)) // Apelăm completion cu succes
    } catch {
        completion(.failure(error)) // Apelăm completion cu eroare dacă decodarea eșuează
    }

    // Exemplu de gestionare a erorii de rețea sau server
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Apelăm completion cu eroare de rețea
}

// Exemplu de utilizare:
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! Datele primite: \(data)")
    case .failure(let error):
        print("Eroare de solicitare: \(error.localizedDescription)")
    }
}