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.