Qu'est-ce que Combine et pourquoi en a-t-on besoin ?
\nCombine 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).
\nL'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é).
\nConcepts 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
Combine est étroitement intégré à SwiftUI et Foundation, ce qui le rend indispensable pour les applications iOS modernes.
\n\nInstallation
\nCombine 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.
\nPour commencer à utiliser Combine, il suffit de l'importer dans un fichier Swift :
\nimport Combine\nSi 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.
\nInstallation d'OpenCombine via SPM :
\n// Dans Package.swift\ndependencies: [\n .package(url: "https://github.com/CombineOpenSource/Combine.git", from: "0.5.0")\n]\n\nDémarrage rapide avec un exemple de code
\nConsidérons un exemple très simple : création d'un Publisher à partir d'un tableau et abonnement à celui-ci.
\nimport 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)\nSortie console :
\nValeur reçue : 1\nValeur reçue : 2\nValeur reçue : 3\nValeur reçue : 4\nValeur reçue : 5\nTerminé : finished\nUne manière plus idiomatique utilisant l'opérateur sink :
import Combine\n\nlet cancellable = [1, 2, 3, 4, 5].publisher\n .sink(receiveCompletion: { print($0) },\n receiveValue: { print($0) })\nNotez que sink retourne un AnyCancellable. Il faut le conserver, sinon l'abonnement sera annulé immédiatement après la sortie de la portée.
Méthodes/Fonctions principales
\n\n1. sink(receiveCompletion:receiveValue:)
\nCe 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.
\nParamètres :
\n- \n
receiveCompletion— fermeture appelée à la terminaison (succès ou erreur). AccepteSubscribers.Completion<Failure>. \n receiveValue— fermeture appelée à la réception de chaque nouvelle valeur. \n
Exemple :
\nlet cancellable = Just("Hell Aussi dans la bibliothèque
Traitement d'images en Java : redimensionnement et recadrage (resize, crop)
Configuration d'applications Swift : la bibliothèque SwiftyConfig
GraphQL en TypeScript : Bibliothèques pour des API typés sécurisés
Génération de PDF en JavaScript : la bibliothèque PDFKit
PDFKit pour JavaScript (Node.js) : guide complet avec exemples