Obsługa błędów i kody statusu HTTP
Sprawdzanie kodów statusu odpowiedzi i mapowanie błędów na typowane błędy domenowe.
Obsługa błędów i kody statusu HTTP to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Przedziały kodów statusu HTTP
Odpowiedzi HTTP sygnalizują powodzenie lub niepowodzenie za pomocą kodów statusu: 2xx oznacza powodzenie, 3xx przekierowanie, 4xx błąd klienta, a 5xx błąd serwera.
// 200 OK, 201 Created
// 400 Bad Request, 401 Unauthorized, 404 Not Found
// 500 Internal Server ErrorSprawdzanie statusu w Swift
Rzutuj URLResponse na HTTPURLResponse i po wykonaniu żądania asynchronicznego sprawdź statusCode.
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)
}Typowane błędy sieciowe
Zdefiniuj typowany enum błędów sieciowych, aby umożliwić wyczerpującą obsługę w blokach catch.
enum NetworkError: Error {
case invalidURL
case invalidResponse
case httpError(Int)
case decodingError(Error)
case noData
}Mapowanie kodów statusu na błędy
Użyj instrukcji switch dla kodów statusu, aby zgłaszać zrozumiałe błędy domenowe zamiast surowych liczb całkowitych.
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)
}Dekodowanie odpowiedzi z błędem
Gdy status wskazuje błąd, treść odpowiedzi często zawiera komunikat o błędzie w formacie JSON. Zdekoduj go, aby uzyskać dokładniejsze informacje diagnostyczne.
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")
}Propagowanie błędów w async
Współbieżność strukturalna Swift naturalnie propaguje błędy: zgłoszony błąd anuluje zadania równorzędne w grupie TaskGroup.
async let users = fetchUsers()
async let posts = fetchPosts()
let (u, p) = try await (users, posts) // if either throws, both cancelPrzechwytywanie konkretnych błędów
Używaj typowanych bloków catch, aby odmiennie obsługiwać różne rodzaje błędów w kodzie wywołującym.
do {
let items = try await fetchItems()
} catch NetworkError.unauthorized {
showLoginScreen()
} catch NetworkError.httpError(let code) {
print("HTTP Error: \(code)")
} catch {
print("Unexpected: \(error)")
}Kody URLError
URLError opisuje błędy połączenia: .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")
}Opakowanie Result dla operacji sieciowych
Zwracaj Result z funkcji pobierających dane, gdy chcesz, aby kod wywołujący obsługiwał błędy bez użycia 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)
}
}Rejestrowanie błędów
Rejestruj błędy sieciowe wraz z istotnym kontekstem (URL, kod statusu, treść odpowiedzi), aby ułatwić debugowanie w środowisku produkcyjnym.
func log(_ error: NetworkError, url: URL) {
print("[Network] \(url.absoluteString) → \(error)")
}Komunikaty o błędach dla użytkownika
Mapuj błędy techniczne na zrozumiałe dla użytkownika komunikaty. Nigdy nie wyświetlaj w interfejsie surowych kodów statusu HTTP.
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."
}
}
}Szybkie sprawdzenie
Jaki zakres kodów statusu HTTP wskazuje pomyślną odpowiedź?
Podsumowanie lekcji
Po wywołaniu URLSession.data(from:) rzutuj wynik na HTTPURLResponse i sprawdź statusCode. Mapuj kody na typowane przypadki Error. Używaj URLError w przypadku błędów połączenia. Propaguj błędy za pomocą try/throw i przechwytuj je w typowanych blokach catch.
Często zadawane pytania
Czy lekcja „Obsługa błędów i kody statusu HTTP” jest bezpłatna?
Tak — pełny tekst „Obsługa błędów i kody statusu HTTP” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Obsługa błędów i kody statusu HTTP”?
Sprawdzanie kodów statusu odpowiedzi i mapowanie błędów na typowane błędy domenowe. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Obsługa błędów i kody statusu HTTP”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- URLSession data(from:) z async/await
- Codable: kodowanie i dekodowanie JSON
- Obsługa błędów i kody statusu HTTP
- Logika ponawiania i działanie URLSession w tle