Sobes.tech
Middle

¿Qué manejador de finalización escribiste?

sobes.tech AI

Respuesta de la IA

He escrito numerosos manejadores de finalización para diversas tareas, incluyendo:

  • Procesamiento de resultados de solicitudes de red (obtención de datos, estado de ejecución).
  • Operaciones asíncronas con bases de datos (guardado, lectura, actualización).
  • Operaciones del sistema de archivos (lectura, escritura, eliminación).
  • Animaciones e interfaces de usuario (finalización de animaciones, manejo de gestos del usuario).
  • Operaciones asíncronas personalizadas con la capacidad de transmitir resultados y errores.

Por ejemplo, al trabajar con URLSession suelo usar un patrón así:

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        // Manejo del error
        completion(.failure(error))
        return
    }
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode),
          let data = data else {
        // Manejo de respuesta o datos no válidos
        completion(.failure(URLError(.badServerResponse)))
        return
    }
    // Procesamiento exitoso de los datos
    do {
        let model = try JSONDecoder().decode(SomeModel.self, from: data)
        completion(.success(model))
    } catch {
        // Manejo del error de decodificación
        completion(.failure(error))
    }
}.resume()

donde completion es una closure de tipo (Result<SomeModel, Error>) -> Void. El uso de Result permite distinguir claramente entre la finalización exitosa y el error.