Gestión de errores y códigos de estado HTTP
Compruebe los códigos de estado de las respuestas y convierta los errores en errores de dominio tipados.
Gestión de errores y códigos de estado HTTP es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 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.
Rangos de códigos de estado HTTP
Las respuestas HTTP indican éxito o error mediante códigos de estado: 2xx para éxito, 3xx para redirecciones, 4xx para errores del cliente y 5xx para errores del servidor.
// 200 OK, 201 Created
// 400 Bad Request, 401 Unauthorized, 404 Not Found
// 500 Internal Server ErrorComprobación del estado en Swift
Convierta URLResponse a HTTPURLResponse y compruebe statusCode después de una solicitud asíncrona.
let (data, response) = try await URLSession.shared.data(from: url)
guard let http = response as? HTTPURLResponse else {
throw NetworkError.invalidResponse
}
guard (200..<300).contains(http.statusCode) else {
throw NetworkError.httpError(http.statusCode)
}Errores de red tipados
Defina un enum de errores tipado para los fallos de red, de modo que pueda gestionar exhaustivamente los errores en los bloques catch.
enum NetworkError: Error {
case invalidURL
case invalidResponse
case httpError(Int)
case decodingError(Error)
case noData
}Asignación de códigos de estado a errores
Use switch sobre los códigos de estado para emitir errores de dominio significativos en lugar de enteros sin contexto.
switch http.statusCode {
case 200..<300: break // success
case 401: throw NetworkError.unauthorized
case 404: throw NetworkError.notFound
case 500..<600: throw NetworkError.serverError(http.statusCode)
default: throw NetworkError.httpError(http.statusCode)
}Decodificación de respuestas de error
Cuando el estado indica un error, el cuerpo suele contener un mensaje de error JSON. Decodifíquelo para obtener diagnósticos más útiles.
if http.statusCode != 200 {
struct APIError: Decodable { var message: String }
let apiError = try? JSONDecoder().decode(APIError.self, from: data)
throw NetworkError.serverMessage(apiError?.message ?? "Unknown error")
}Propagación de errores en async
La concurrencia estructurada de Swift propaga los errores de forma natural: un error lanzado cancela las tareas hermanas de un TaskGroup.
async let users = fetchUsers()
async let posts = fetchPosts()
let (u, p) = try await (users, posts) // if either throws, both cancelCaptura de errores específicos
Use bloques catch tipados para gestionar de forma diferenciada los distintos tipos de errores en el código que realiza las llamadas.
do {
let items = try await fetchItems()
} catch NetworkError.unauthorized {
showLoginScreen()
} catch NetworkError.httpError(let code) {
print("HTTP Error: \(code)")
} catch {
print("Unexpected: \(error)")
}Códigos de URLError
URLError describe fallos de conectividad: .notConnectedToInternet, .timedOut, .cannotFindHost.
do {
let (data, _) = try await URLSession.shared.data(from: url)
} catch let urlError as URLError where urlError.code == .notConnectedToInternet {
print("No internet connection")
}Contenedor Result para redes
Devuelva Result desde las funciones de obtención de datos cuando quiera que quienes las llamen gestionen los errores sin try/catch.
func fetchUser() async -> Result<User, NetworkError> {
do {
let user = try await performFetch()
return .success(user)
} catch let e as NetworkError {
return .failure(e)
} catch {
return .failure(.unknown)
}
}Registro de errores
Registre los errores de red con el contexto relevante (URL, código de estado y cuerpo) para facilitar la depuración en producción.
func log(_ error: NetworkError, url: URL) {
print("[Network] \(url.absoluteString) → \(error)")
}Mensajes de error para el usuario
Asigne los errores técnicos a mensajes comprensibles para el usuario. Nunca muestre códigos de estado HTTP sin procesar en la interfaz.
extension NetworkError: LocalizedError {
var errorDescription: String? {
switch self {
case .unauthorized: return "Please log in again."
case .notFound: return "The requested item was not found."
case .serverError: return "Server error. Please try again later."
default: return "Something went wrong."
}
}
}Comprobación rápida
¿Qué rango de códigos de estado HTTP indica una respuesta correcta?
Resumen de la lección
Después de URLSession.data(from:), convierta la respuesta a HTTPURLResponse y compruebe statusCode. Asigne los códigos a casos de error tipados de Error. Use URLError para los fallos de conectividad. Propague los errores con try/throw y captúrelos con bloques catch tipados.
Preguntas frecuentes
¿La lección «Gestión de errores y códigos de estado HTTP» es gratis?
Sí — el texto completo de «Gestión de errores y códigos de estado HTTP» 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 «Gestión de errores y códigos de estado HTTP»?
Compruebe los códigos de estado de las respuestas y convierta los errores en errores de dominio tipados. 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 3 de 4.
¿Cuánto tiempo toma la lección «Gestión de errores y códigos de estado HTTP»?
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