Sobes.tech
Middle

¿Qué manejador de finalización escribiste?

sobes.tech AI

Respuesta de la IA

Ejemplo de manejador de finalización para una solicitud de red con posibles errores:

// Definimos un tipo para el resultado de la solicitud (éxito o error)
typealias RequestResult<T: Codable> = Result<T, Error>

// Función para realizar una solicitud de red
func performRequest<T: Codable>(url: URL, completion: @escaping (RequestResult<T>) -> Void) {
    // En este bloque generalmente se realiza la llamada a URLSession.shared.dataTask
    // con manejo de respuesta, decodificación JSON y errores.

    // Ejemplo de manejo (supongamos que se recibe una respuesta exitosa y datos)
    let sampleData = Data() // Aquí deberían estar los datos reales
    let decoder = JSONDecoder()

    do {
        let decodedData = try decoder.decode(T.self, from: sampleData)
        completion(.success(decodedData)) // Llamamos a completion con resultado exitoso
    } catch {
        completion(.failure(error)) // Llamamos a completion con error si la decodificación falla
    }

    // Ejemplo de manejo de error de red o servidor
    // let networkError = URLError(.notConnectedToInternet)
    // completion(.failure(networkError)) // Llamamos a completion con error de red
}

// Ejemplo de uso:
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("¡Éxito! Datos recibidos: \(data)")
    case .failure(let error):
        print("Error en la solicitud: \(error.localizedDescription)")
    }
}