Gestione degli errori e codici di stato HTTP
Verificare i codici di stato della risposta e convertire gli errori in errori di dominio tipizzati.
Gestione degli errori e codici di stato HTTP è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Intervalli dei codici di stato HTTP
Le risposte HTTP indicano il successo o il fallimento tramite i codici di stato: 2xx indica un successo, 3xx un reindirizzamento, 4xx un errore del client e 5xx un errore del server.
// 200 OK, 201 Created
// 400 Bad Request, 401 Unauthorized, 404 Not Found
// 500 Internal Server ErrorVerifica dello stato in Swift
Esegua il cast di URLResponse a HTTPURLResponse e controlli statusCode dopo una richiesta asincrona.
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)
}Errori di rete tipizzati
Definisca un'enumerazione di errori tipizzata per i problemi di rete, così da abilitare blocchi catch esaustivi.
enum NetworkError: Error {
case invalidURL
case invalidResponse
case httpError(Int)
case decodingError(Error)
case noData
}Associazione dei codici di stato agli errori
Utilizzi switch sui codici di stato per generare errori di dominio significativi invece di semplici numeri interi.
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)
}Decodifica delle risposte di errore
Quando lo stato indica un errore, il corpo della risposta contiene spesso un messaggio di errore JSON. Lo decodifichi per ottenere informazioni diagnostiche più utili.
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")
}Propagazione degli errori in async
La concorrenza strutturata di Swift propaga gli errori in modo naturale: un errore generato annulla le attività affiancate in un TaskGroup.
async let users = fetchUsers()
async let posts = fetchPosts()
let (u, p) = try await (users, posts) // if either throws, both cancelCattura di errori specifici
Utilizzi blocchi catch tipizzati per gestire separatamente i diversi tipi di errore nel codice chiamante.
do {
let items = try await fetchItems()
} catch NetworkError.unauthorized {
showLoginScreen()
} catch NetworkError.httpError(let code) {
print("HTTP Error: \(code)")
} catch {
print("Unexpected: \(error)")
}Codici URLError
URLError descrive i problemi di connettività: .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")
}Wrapper Result per il networking
Restituisca Result dalle funzioni di recupero dei dati quando desidera che siano i chiamanti a gestire gli errori senza 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)
}
}Registrazione degli errori
Registri gli errori di rete insieme al contesto rilevante (URL, codice di stato, corpo della risposta) per facilitare il debugging in produzione.
func log(_ error: NetworkError, url: URL) {
print("[Network] \(url.absoluteString) → \(error)")
}Messaggi di errore rivolti all'utente
Assocî gli errori tecnici a messaggi comprensibili per l'utente. Non mostri mai nell'interfaccia i codici di stato HTTP grezzi.
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."
}
}
}Verifica rapida
Quale intervallo di codici di stato HTTP indica una risposta riuscita?
Riepilogo della lezione
Dopo URLSession.data(from:), esegua il cast a HTTPURLResponse e controlli statusCode. Associ i codici a casi di Error tipizzati. Utilizzi URLError per i problemi di connettività. Propaghi gli errori con try/throw e li catturi con blocchi catch tipizzati.
Domande Frequenti
La lezione «Gestione degli errori e codici di stato HTTP» è gratuita?
Sì — il testo completo di «Gestione degli errori e codici di stato HTTP» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Gestione degli errori e codici di stato HTTP»?
Verificare i codici di stato della risposta e convertire gli errori in errori di dominio tipizzati. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Gestione degli errori e codici di stato HTTP»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- URLSession data(from:) con async/await
- Codable: codifica e decodifica JSON
- Gestione degli errori e codici di stato HTTP
- Logica di retry e URLSession in background