0Pricing
Swift Academy · Lekcja

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 Error

Sprawdzanie 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 cancel

Przechwytywanie 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

  1. URLSession data(from:) z async/await
  2. Codable: kodowanie i dekodowanie JSON
  3. Obsługa błędów i kody statusu HTTP
  4. Logika ponawiania i działanie URLSession w tle
← Powrót do Swift Academy