Combine pour Swift : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Combine et pourquoi en a-t-on besoin ?

\n

Combine est un framework Apple pour la programmation réactive, présenté en 2019 avec iOS 13. Il fournit une API Swift déclarative pour le traitement des événements au fil du temps. Combine permet de combiner des opérateurs de traitement d'événements asynchrones en chaînes de traitement de données (pipeline).

\n

L'objectif principal de Combine est de simplifier le travail avec les opérations asynchrones : requêtes réseau, notifications, KVO (Key-Value Observing), minuteurs, délégués et fonctions de rappel. Au lieu de mécanismes disparates, Combine propose une interface unifiée basée sur Publisher (éditeur) et Subscriber (abonné).

\n

Concepts clés :

\n
    \n
  • Publisher — source de données qui peut envoyer des valeurs et se terminer (avec succès ou avec une erreur).
  • \n
  • Subscriber — destinataire des données qui réagit aux événements du Publisher.
  • \n
  • Operator — méthode qui transforme, filtre ou combine les flux de données.
  • \n
  • Subscription — lien entre Publisher et Subscriber, gérant le flux de données.
  • \n
\n

Combine est étroitement intégré à SwiftUI et Foundation, ce qui le rend indispensable pour les applications iOS modernes.

\n\n

Installation

\n

Combine est un framework intégré d'Apple. Son utilisation ne nécessite pas l'installation de paquets supplémentaires via CocoaPods, SPM ou Carthage. Il est disponible à partir d'iOS 13, macOS 10.15, tvOS 13 et watchOS 6.

\n

Pour commencer à utiliser Combine, il suffit de l'importer dans un fichier Swift :

\n
import Combine
\n

Si vous utilisez Swift Package Manager pour gérer les dépendances, Combine est déjà inclus dans la bibliothèque standard. Pour les projets prenant en charge des versions plus anciennes du système d'exploitation, vous pouvez utiliser OpenCombine — une implémentation open-source de Combine.

\n

Installation d'OpenCombine via SPM :

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

Démarrage rapide avec un exemple de code

\n

Considérons un exemple très simple : création d'un Publisher à partir d'un tableau et abonnement à celui-ci.

\n
import Combine\n\n// 1. Création d'un Publisher à partir d'un tableau\nlet publisher = [1, 2, 3, 4, 5].publisher\n\n// 2. Création d'un Subscriber\nlet subscriber = Subscribers.Sink<Int, Never>(\n    receiveCompletion: { completion in\n        print("Terminé : \\(completion)")\n    },\n    receiveValue: { value in\n        print("Valeur reçue : \\(value)")\n    }\n)\n\n// 3. Abonnement\npublisher.subscribe(subscriber)
\n

Sortie console :

\n
Valeur reçue : 1\nValeur reçue : 2\nValeur reçue : 3\nValeur reçue : 4\nValeur reçue : 5\nTerminé : finished
\n

Une manière plus idiomatique utilisant l'opérateur sink :

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

Notez que sink retourne un AnyCancellable. Il faut le conserver, sinon l'abonnement sera annulé immédiatement après la sortie de la portée.

\n\n

Méthodes/Fonctions principales

\n\n

1. sink(receiveCompletion:receiveValue:)

\n

Ce qu'elle fait : Crée un abonné qui reçoit toutes les valeurs et la terminaison du Publisher. C'est la manière la plus simple de s'abonner à un flux.

\n

Paramètres :

\n
    \n
  • receiveCompletion — fermeture appelée à la terminaison (succès ou erreur). Accepte Subscribers.Completion<Failure>.
  • \n
  • receiveValue — fermeture appelée à la réception de chaque nouvelle valeur.
  • \n
\n

Exemple :

\n
let cancellable = Just("Hell                    

Recommendations