0Pricing
Swift Academy · Lektion

Operatoren zur Fehlerbehandlung

Stellen Sie die Verarbeitung mit catch, retry und replaceError wieder her.

Operatoren zur Fehlerbehandlung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Fehler in Combine

Combine-Publisher besitzen einen Failure-Typ. Wenn ein Publisher fehlschlägt, beendet er den Stream – es werden keine weiteren Werte ausgegeben. Für robuste Pipelines benötigen Sie Operatoren, die Fehler behandeln, transformieren oder abfangen.

Der Failure-Typ

Jeder Publisher deklariert einen Output- und einen Failure-Typ. Eine Pipeline wird nur kompiliert, wenn die Fehlertypen übereinstimmen. Daher werden Operatoren, die Fehler ändern, häufig verwendet.

let publisher: AnyPublisher<Data, URLError> = apiClient.request()
// Output = Data, Failure = URLError

catch

catch fängt einen Fehler ab und ersetzt den fehlgeschlagenen Publisher durch einen neuen. Dadurch können Sie im Fehlerfall Ersatzwerte bereitstellen.

apiClient.fetchUser()
    .catch { error in
        Just(User.guest)
    }
    .sink { user in
        print("Got", user.name)
    }
    .store(in: &cancellables)

replaceError

replaceError(with:) ist eine einfachere Form von catch: Der Operator ersetzt jeden Fehler durch einen einzelnen Ersatzwert und beendet den Stream erfolgreich.

apiClient.fetchCount()
    .replaceError(with: 0)
    .sink { count in
        self.badge.text = "\(count)"
    }
    .store(in: &cancellables)

retry

retry(n) abonniert den vorgelagerten Publisher bei einem Fehler bis zu n-mal erneut. Der Operator eignet sich ideal für vorübergehende Netzwerkfehler.

apiClient.fetchData()
    .retry(3)
    .sink(receiveCompletion: { print($0) },
          receiveValue: { print($0) })
    .store(in: &cancellables)

retry und catch kombinieren

Ein gängiges Muster für Robustheit: retry einige Male verwenden und anschließend mit catch auf eine Ausweichlösung zurückgreifen, wenn alle Versuche fehlschlagen.

apiClient.fetchData()
    .retry(2)
    .catch { _ in
        Just(Data())
    }
    .sink { data in
        self.process(data)
    }
    .store(in: &cancellables)

mapError

mapError wandelt einen Fehlertyp in einen anderen um. Das ist unerlässlich, um verschiedene Fehler aus vorgelagerten Quellen zu einem einheitlichen Fehler auf App-Ebene zusammenzuführen.

enum AppError: Error { case network }

apiClient.request()
    .mapError { _ in AppError.network }
    .sink(receiveCompletion: { _ in }, receiveValue: { _ in })
    .store(in: &cancellables)

Warum mapError wichtig ist

Wenn Sie Publisher kombinieren, müssen ihre Failure-Typen übereinstimmen. mapError normalisiert inkompatible Fehler, sodass Operatoren wie merge und zip kompiliert werden können und Ihr sink nur einen Fehlertyp verarbeiten muss.

setFailureType

Einige Publisher, etwa Just, haben den Fehlertyp Never. setFailureType(to:) schafft eine Brücke, damit sie mit Publishern kombiniert werden können, die fehlschlagen können.

Just(42)
    .setFailureType(to: AppError.self)
    .merge(with: failablePublisher)
    .sink(receiveCompletion: { _ in }, receiveValue: { _ in })
    .store(in: &cancellables)

Abschlüsse behandeln

In sink teilt Ihnen die Completion-Closure mit, ob der Stream beendet oder fehlgeschlagen ist. Prüfen Sie sie, um auf Fehler zu reagieren, die vorgelagert nicht abgefangen wurden.

publisher.sink(
    receiveCompletion: { completion in
        if case .failure(let error) = completion {
            self.showAlert(error)
        }
    },
    receiveValue: { value in
        self.update(value)
    }
).store(in: &cancellables)

Robuste Pipelines entwerfen

Bewährte Vorgehensweisen für die Fehlerbehandlung:

  • Verwenden Sie retry für vorübergehende Fehler
  • Verwenden Sie catch oder replaceError für Ausweichlösungen
  • Verwenden Sie mapError, um Fehlertypen zu vereinheitlichen
  • Behandeln Sie den Fehlerfall in sink immer

Kurze Überprüfung

Testen Sie Ihr Wissen über die Fehlerbehandlung.

Zusammenfassung

Sie haben die Combine-Operatoren zur Fehlerbehandlung kennengelernt:

  • catch / replaceError — stellen Ausweichlösungen bereit
  • retry — wiederholt den Vorgang bei einem Fehler
  • mapError / setFailureType — vereinheitlichen Fehlertypen

Zusammen ermöglichen sie Ihnen, Pipelines zu erstellen, die sich kontrolliert verschlechtern, anstatt beim ersten Fehler abzubrechen.

Häufig gestellte Fragen

Ist die Lektion „Operatoren zur Fehlerbehandlung“ kostenlos?

Ja — der vollständige Text von „Operatoren zur Fehlerbehandlung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Operatoren zur Fehlerbehandlung“?

Stellen Sie die Verarbeitung mit catch, retry und replaceError wieder her. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Operatoren zur Fehlerbehandlung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Streams transformieren und kombinieren
  2. Scheduler und Threading
  3. Operatoren zur Fehlerbehandlung
  4. Eigene Publisher und Subscriber
← Zurück zu Swift Academy