0Pricing
Swift Academy · Lektion

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

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