0Pricing
Swift Academy · Lekcja

try await i propagacja błędów

Używaj try await z asynchronicznymi funkcjami zgłaszającymi błędy, obsługuj niepowodzenia za pomocą do/catch i poprawnie propaguj błędy wyżej, w tym CancellationError .

try await i propagacja błędów to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 3. 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 3 lekcji w sumie.

Po co try await

try await wywołuje asynchroniczną funkcję zgłaszającą błędy. Jeśli zgłosi ona błąd, jest on propagowany, chyba że go przechwycisz. Możesz też użyć try?, aby zamienić wynik na typ Optional.

Asynchroniczna funkcja zgłaszająca błędy + do/catch

Utwórz asynchroniczną funkcję zgłaszającą błędy i wywołaj ją za pomocą try await wewnątrz do/catch, aby obsługiwać błędy.

enum NetError: Error { case offline; case badStatus(Int) }

func fetchNumber(from ok: Bool) async throws -> Int {
    try await Task.sleep(nanoseconds: 100_000_000)
    if !ok { throw NetError.offline }
    return 7
}

Task {
    do {
        let n = try await fetchNumber(from: true)
        print("value:", n)          // 7
    } catch {
        print("failed:", error)     // handled here
    }
}

Konwersja błędów

Użyj try?, aby otrzymać typ Optional zamiast zgłaszać błąd. Unikaj try!, chyba że masz pewność, że operacja nie może się nie powieść.

Task {
    // try? converts failure to nil
    let maybe = try? await fetchNumber(from: false)
    print("optional result:", String(describing: maybe)) // nil on error

    // ⚠️ try! will crash if an error is thrown — avoid in production
    // let forced = try! await fetchNumber(from: false)
}

Przekazywanie błędów wyżej

Oznacz wywołujących jako async throws, aby propagować błędy w górę; można je wtedy obsłużyć na wyższym poziomie.

func loadProfile(ok: Bool) async throws -> String {
    let id = try await fetchNumber(from: ok)   // propagate on error
    return "id:\\(id)"
}

Task {
    do {
        let s = try await loadProfile(ok: true)
        print(s) // "id:7"
    } catch {
        print("propagated:", error)
    }
}

Konkretne bloki catch

Używaj bloków catch z dopasowaniem wzorców. Obsługuj CancellationError jako pierwszy, aby ścieżki zamykania działały szybko i bez zbędnych komunikatów.

enum FileError: Error { case notFound }

func mightCancel() async throws {
    for _ in 0..<5 {
        try Task.checkCancellation()                 // throws CancellationError
        try await Task.sleep(nanoseconds: 30_000_000)
    }
}

Task {
    let t = Task { try await mightCancel() }
    t.cancel()
    do {
        try await t.value
    } catch is CancellationError {
        print("cancelled cleanly")                   // handle cancellation separately
    } catch {
        print("other error:", error)
    }
}

Wskazówki

Wskazówki:

  • Propaguj błędy za pomocą try aż do granicy, która może podjąć decyzję, takiej jak interfejs użytkownika, CLI lub zadanie najwyższego poziomu.
  • Preferuj błędy domenowe (typy wyliczeniowe), aby zwiększyć przejrzystość.
  • Konwertuj błędy za pomocą try? tylko wtedy, gdy brak wyniku jest akceptowalny.
  • Obsługuj CancellationError osobno.

Obsługa błędów za pomocą try await

Szybkie sprawdzenie: Co dzieje się z błędami po wykonaniu try await f()?

Podsumowanie

Podsumowanie: Używaj try await z asynchronicznymi funkcjami zgłaszającymi błędy, propaguj błędy z funkcji pomocniczych, konwertuj je za pomocą try?, gdy wynik opcjonalny jest wystarczający, i jawnie obsługuj CancellationError.

Często zadawane pytania

Czy lekcja „try await i propagacja błędów” jest bezpłatna?

Tak — pełny tekst „try await i propagacja błędów” 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 3 lekcji w sumie.

Co nauczysz się w „try await i propagacja błędów”?

Używaj try await z asynchronicznymi funkcjami zgłaszającymi błędy, obsługuj niepowodzenia za pomocą do/catch i poprawnie propaguj błędy wyżej, w tym CancellationError . Ć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 3.

Ile czasu zajmuje lekcja „try await i propagacja błędów”?

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. Współbieżność strukturalna i funkcje asynchroniczne
  2. async let, Task i anulowanie
  3. try await i propagacja błędów
← Powrót do Swift Academy