Sobes.tech
Junior — Middle

¿Cuáles son las diferencias entre usar async/await y los manejadores de finalización al trabajar con código asíncrono?

sobes.tech AI

Respuesta de la IA

Las principales diferencias entre async/await y los manejadores de finalización al trabajar con código asíncrono en iOS:

  • Sintaxis y legibilidad: async/await permite escribir código asíncrono en un estilo secuencial, lo que mejora la legibilidad y facilita la depuración. Los manejadores de finalización utilizan cierres anidados, lo que puede llevar a un "infierno de callbacks".

  • Manejo de errores: con async/await se puede usar el mecanismo habitual try/catch para manejar errores, mientras que en los manejadores de finalización los errores generalmente se pasan a través de parámetros, lo que requiere verificaciones adicionales.

  • Compatibilidad: async/await es compatible con Swift a partir de la versión 5.5 y iOS 15, mientras que los manejadores de finalización funcionan en todas las versiones.

Ejemplo con async/await:

func fetchData() async throws -> Data {
    let url = URL(string: "https://example.com/data")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return data
}

Task {
    do {
        let data = try await fetchData()
        print("Datos recibidos: \(data)")
    } catch {
        print("Error: \(error)")
    }
}

Ejemplo con manejador de finalización:

func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
    let url = URL(string: "https://example.com/data")!
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let error = error {
            completion(.failure(error))
            return
        }
        if let data = data {
            completion(.success(data))
        }
    }.resume()
}

fetchData { result in
    switch result {
    case .success(let data):
        print("Datos recibidos: \(data)")
    case .failure(let error):
        print("Error: \(error)")
    }
}

Por lo tanto, async/await simplifica el trabajo con código asíncrono, haciéndolo más comprensible y conveniente.