URLSession data(from:) con async/await
Obtenga datos de forma asíncrona desde APIs REST mediante la API moderna de URLSession.
URLSession data(from:) con async/await es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
API moderna de URLSession
Swift 5.5 o posterior incluye sobrecargas asíncronas en URLSession: data(from:delegate:), que se suspenden en lugar de usar callbacks.
let (data, response) = try await URLSession.shared.data(from: URL(string: "https://api.example.com/items")!)Función de búsqueda completa
Envuelva la llamada en una función asíncrona que pueda lanzar errores para que sea componible y fácil de probar.
func fetchItems() async throws -> [Item] {
let url = URL(string: "https://api.example.com/items")!
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode([Item].self, from: data)
}Llamadas desde SwiftUI
Llame a funciones asíncronas desde el modificador .task o desde Task { } dentro de la acción de un botón.
struct ItemList: View {
@State private var items: [Item] = []
var body: some View {
List(items, id: \.id) { Text($0.name) }
.task { items = (try? await fetchItems()) ?? [] }
}
}URLRequest para encabezados personalizados
Construya un URLRequest con el método, los encabezados y el cuerpo, y páselo después a data(for:).
var request = URLRequest(url: URL(string: "https://api.example.com/login")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONEncoder().encode(LoginBody(email: "a@b.com", password: "pass"))
let (data, _) = try await URLSession.shared.data(for: request)Comprobación del estado HTTP
Convierta la respuesta a HTTPURLResponse y compruebe el código de estado antes de decodificarla.
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
throw URLError(.badServerResponse)
}
let item = try JSONDecoder().decode(Item.self, from: data)Cancelación
Al cancelar la Task principal, la solicitud de URLSession en curso se cancela automáticamente.
let task = Task {
let items = try await fetchItems()
// ...
}
task.cancel() // cancels URLSession request if in-flightCarga de datos
Use upload(for:from:) para enviar datos binarios o formularios de forma asíncrona mediante POST.
var request = URLRequest(url: uploadURL)
request.httpMethod = "POST"
let (data, _) = try await URLSession.shared.upload(for: request, from: imageData)Descarga de archivos
download(from:) descarga un archivo en una URL temporal del disco en lugar de cargarlo en memoria.
let (fileURL, _) = try await URLSession.shared.download(from: remoteURL)
let destURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("file.pdf")
try FileManager.default.moveItem(at: fileURL, to: destURL)Configuración personalizada de URLSession
Cree una sesión personalizada con tiempos de espera, una política de almacenamiento en caché y compatibilidad con la ejecución en segundo plano.
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 30
config.requestCachePolicy = .reloadIgnoringLocalCacheData
let session = URLSession(configuration: config)async bytes para streaming
Use bytes(from:) para transmitir los datos de la respuesta línea por línea sin almacenar en búfer toda la respuesta.
let (stream, _) = try await URLSession.shared.bytes(from: url)
for try await line in stream.lines {
print(line)
}Pruebas con URLProtocol
Simule respuestas de red en las pruebas creando una subclase de URLProtocol e inyectándola en una configuración de sesión personalizada.
class MockURLProtocol: URLProtocol {
static var requestHandler: ((URLRequest) throws -> (HTTPURLResponse, Data))?
// override canInit, startLoading, stopLoading
}Comprobación rápida
¿Qué método asíncrono de URLSession descarga directamente la respuesta de una URL en un archivo temporal del disco?
Repaso de la lección
Use URLSession.shared.data(from:) para solicitudes GET asíncronas, data(for:) con un URLRequest personalizado para POST/PUT, download(from:) para descargas de archivos y bytes(from:) para streaming. Compruebe siempre el código de estado HTTP antes de decodificar.
Preguntas frecuentes
¿La lección «URLSession data(from:) con async/await» es gratis?
Sí — el texto completo de «URLSession data(from:) con async/await» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «URLSession data(from:) con async/await»?
Obtenga datos de forma asíncrona desde APIs REST mediante la API moderna de URLSession. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «URLSession data(from:) con async/await»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- URLSession data(from:) con async/await
- Codable: codificación y decodificación de JSON
- Gestión de errores y códigos de estado HTTP
- Lógica de reintentos y URLSession en segundo plano