Combine für Swift: vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist Combine und warum wird es benötigt?

\n

Combine ist ein Apple-Framework für reaktive Programmierung, das 2019 zusammen mit iOS 13 vorgestellt wurde. Es bietet eine deklarative Swift-API zur Verarbeitung von Ereignissen im Zeitverlauf. Combine ermöglicht es, Operatoren zur Verarbeitung asynchroner Ereignisse zu Datenverarbeitungsketten (Pipelines) zu kombinieren.

\n

Die Hauptaufgabe von Combine besteht darin, die Arbeit mit asynchronen Operationen zu vereinfachen: Netzwerkanfragen, Benachrichtigungen, KVO (Key-Value Observing), Timer, Delegaten und Callback-Funktionen. Anstelle verschiedener Mechanismen bietet Combine eine einheitliche Schnittstelle auf Basis von Publisher und Subscriber.

\n

Schlüsselkonzepte:

\n
    \n
  • Publisher — eine Datenquelle, die Werte senden und abschließen kann (erfolgreich oder mit Fehler).
  • \n
  • Subscriber — ein Datenempfänger, der auf Ereignisse des Publishers reagiert.
  • \n
  • Operator — eine Methode, die Datenströme transformiert, filtert oder kombiniert.
  • \n
  • Subscription — die Verbindung zwischen Publisher und Subscriber, die den Datenfluss steuert.
  • \n
\n

Combine ist eng mit SwiftUI und Foundation integriert, was es für moderne iOS-Apps unverzichtbar macht.

\n\n

Installation

\n

Combine ist ein integriertes Apple-Framework. Für die Nutzung müssen keine zusätzlichen Pakete über CocoaPods, SPM oder Carthage installiert werden. Es ist ab iOS 13, macOS 10.15, tvOS 13 und watchOS 6 verfügbar.

\n

Um Combine zu verwenden, reicht es aus, es in einer Swift-Datei zu importieren:

\n
import Combine
\n

Wenn Sie den Swift Package Manager zur Verwaltung von Abhängigkeiten verwenden, ist Combine bereits in der Standardbibliothek enthalten. Für Projekte, die ältere Betriebssystemversionen unterstützen, kann OpenCombine verwendet werden – eine Open-Source-Implementierung von Combine.

\n

Installation von OpenCombine über SPM:

\n
// In Package.swift\ndependencies: [\n    .package(url: "https://github.com/CombineOpenSource/Combine.git", from: "0.5.0")\n]
\n\n

Schnellstart mit Codebeispiel

\n

Betrachten wir ein einfaches Beispiel: Erstellen eines Publishers aus einem Array und Abonnieren desselben.

\n
import Combine\n\n// 1. Publisher aus einem Array erstellen\nlet publisher = [1, 2, 3, 4, 5].publisher\n\n// 2. Subscriber erstellen\nlet subscriber = Subscribers.Sink<Int, Never>(\n    receiveCompletion: { completion in\n        print("Abgeschlossen: \\(completion)")\n    },\n    receiveValue: { value in\n        print("Wert erhalten: \\(value)")\n    }\n)\n\n// 3. Abonnieren\npublisher.subscribe(subscriber)
\n

Ausgabe auf der Konsole:

\n
Wert erhalten: 1\nWert erhalten: 2\nWert erhalten: 3\nWert erhalten: 4\nWert erhalten: 5\nAbgeschlossen: finished
\n

Eine idiomatischere Methode mit dem Operator sink:

\n
import Combine\n\nlet cancellable = [1, 2, 3, 4, 5].publisher\n    .sink(receiveCompletion: { print($0) },\n          receiveValue: { print($0) })
\n

Hinweis: sink gibt ein AnyCancellable zurück. Dieses muss aufbewahrt werden, da sonst das Abonnement sofort nach Verlassen des Gültigkeitsbereichs gekündigt wird.

\n\n

Wichtige Methoden/Funktionen

\n\n

1. sink(receiveCompletion:receiveValue:)

\n

Was es tut: Erstellt einen Subscriber, der alle Werte und den Abschluss vom Publisher empfängt. Dies ist die einfachste Möglichkeit, einen Stream zu abonnieren.

\n

Parameter:

\n
    \n
  • receiveCompletion — ein Closure, das beim Abschluss aufgerufen wird (erfolgreich oder mit Fehler). Akzeptiert Subscribers.Completion<Failure>.
  • \n
  • receiveValue — ein Closure, das beim Empfang jedes neuen Werts aufgerufen wird.
  • \n
\n

Beispiel:

\n
let cancellable = Just("Hell                    

Empfehlungen