Streams transformieren und kombinieren
Verwenden Sie flatMap, merge, combineLatest und zip.
Streams transformieren und kombinieren ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Mit Streams arbeiten
In Combine gibt ein Publisher im Laufe der Zeit eine Folge von Werten aus. Die eigentliche Stärke liegt in den Operatoren, die diese Streams transformieren und zu neuen Streams kombinieren.
Diese Lektion behandelt die wichtigsten Operatoren zum Transformieren und Kombinieren: flatMap, merge, combineLatest und zip.
map vs. flatMap
map transformiert jeden Wert in einen anderen Wert. flatMap geht weiter: Es transformiert jeden Wert in einen neuen Publisher und führt die Ergebnisse zu einem einzelnen Stream zusammen.
Verwenden Sie flatMap, wenn jede Eingabe eine weitere asynchrone Operation auslösen soll.
flatMap in Aktion
Hier wird ein Stream von Benutzer-IDs auf einen Stream von Netzwerkanfragen abgebildet und zu einem einzigen Stream von Benutzern zusammengeführt.
userIdPublisher
.flatMap { id in
apiClient.fetchUser(id: id)
}
.sink { user in
print("Loaded", user.name)
}
.store(in: &cancellables)Die Nebenläufigkeit von flatMap steuern
Standardmäßig abonniert flatMap alle inneren Publisher gleichzeitig. Mit maxPublishers können Sie die Nebenläufigkeit begrenzen, um einen Server nicht zu überlasten.
idsPublisher
.flatMap(maxPublishers: .max(2)) { id in
apiClient.fetchUser(id: id)
}
.sink { print($0) }
.store(in: &cancellables)merge
merge verschachtelt die Werte mehrerer Publisher desselben Typs in einem Stream und gibt jeden Wert aus, sobald er eintrifft.
let combined = buttonTapA
.merge(with: buttonTapB)
combined
.sink { print("A tap from either button") }
.store(in: &cancellables)combineLatest
combineLatest gibt bei jeder Ausgabe eines beliebigen Eingabe-Publishers einen Wert aus und kombiniert dabei den neuesten Wert jedes Publishers. Der Operator eignet sich besonders für die Formularvalidierung, bei der mehrere Felder berücksichtigt werden müssen.
usernamePublisher
.combineLatest(passwordPublisher)
.map { name, pass in
!name.isEmpty && pass.count >= 8
}
.sink { isValid in
print("Form valid:", isValid)
}
.store(in: &cancellables)Verhalten von combineLatest
Hinweis: combineLatest gibt nichts aus, bevor jede Eingabe mindestens einen Wert geliefert hat. Danach löst jede neue Ausgabe einer beliebigen Eingabe eine kombinierte Ausgabe mit den jeweils neuesten Werten der anderen Eingaben aus.
zip
zip paart Werte anhand ihres Index: den ersten Wert von A mit dem ersten von B, den zweiten mit dem zweiten und so weiter. Der Operator wartet an jeder Position, bis beide Seiten einen Wert haben.
let names = ["Ann", "Bob", "Cy"].publisher
let ages = [30, 25, 41].publisher
names
.zip(ages)
.sink { name, age in
print(name, "is", age)
}
.store(in: &cancellables)combineLatest vs. zip
Die beiden Operatoren lassen sich leicht verwechseln:
- combineLatest – wird bei jeder Ausgabe ausgelöst und verwendet den neuesten Wert jeder Eingabe
- zip – wird nur bei nach Index passenden Paaren ausgelöst
Verwenden Sie combineLatest für einen sich laufend ändernden Zustand und zip, um parallele Ergebnisse eins zu eins einander zuzuordnen.
Für parallele Verarbeitung kombinieren
zip spielt seine Stärke aus, wenn unabhängige Anfragen parallel ausgeführt werden und Sie auf alle Ergebnisse warten müssen.
fetchProfile
.zip(fetchSettings)
.sink { profile, settings in
print("Both loaded")
}
.store(in: &cancellables)Operatoren verketten
In realen Pipelines werden mehrere Operatoren verkettet, um komplexe asynchrone Abläufe deklarativ auszudrücken.
searchTextPublisher
.removeDuplicates()
.flatMap { query in
apiClient.search(query)
}
.map { results in
results.prefix(10)
}
.sink { print($0) }
.store(in: &cancellables)Kurze Überprüfung
Überprüfen Sie Ihr Wissen über Operatoren.
Zusammenfassung
Sie haben gelernt, Streams zu transformieren und zu kombinieren:
- flatMap – Wert in Publisher umwandeln und zusammenführen
- merge – Streams desselben Typs verschachteln
- combineLatest – neueste Werte aller Eingaben verwenden und bei jeder Ausgabe auslösen
- zip – nach Index passende Paare bilden
Mit diesen Operatoren können Sie komplexe asynchrone Logik deklarativ zusammensetzen.
Häufig gestellte Fragen
Ist die Lektion „Streams transformieren und kombinieren“ kostenlos?
Ja — der vollständige Text von „Streams transformieren und kombinieren“ 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 „Streams transformieren und kombinieren“?
Verwenden Sie flatMap, merge, combineLatest und zip. 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 1 von 4.
Wie lange dauert die Lektion „Streams transformieren und kombinieren“?
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