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 = URLErrorcatch
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
sinkimmer
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
- Streams transformieren und kombinieren
- Scheduler und Threading
- Operatoren zur Fehlerbehandlung
- Eigene Publisher und Subscriber