En Swift 5 se han introducido numerosas funcionalidades nuevas. Una de ellas es el tipo Result. El tipo Result en swift 5 es un enum que contiene dos casos: success y failure.

public enum Result<Success, Failure: Error> {
    case success(Success), failure(Failure)
}

Result permite manejar errores para API asíncronas de una forma automática. Por ejemplo, para realizar una llamada a un servidor que devuelve una lista de usuarios (struct User), podemos implementar el siguiente método:

 func fetchUsers(url: URL, completion: @escaping (Result<[User], Error>) -> Void) {
     URLSession.shared.dataTask(with: url) { data, response, error in
         guard let data = data, error == nil else {
             if let error = error as Error? {
                completion(.failure(error))
             }
             return
         }

         do {
             let users = try JSONDecoder().decode([User].self, from: data)
             completion(.success(users))
         } catch let error as? Error {
             completion(.failure(error))
         }

     }.resume()
 }

Ahora, podemos llamar el método fetchUsers de la siguiente manera:

let  url = 'FETCH_USERS_URL'

fetchUsers(url: url) { result in
    switch result {
        case .success(let users):
            // Código para tratar la información de los ususarios.
        case .failure(error):
            // Código para tratar los casos de error
    }
}
Categorías: Swift

0 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Sígueme en Feedly