Fiche 08.01 — @Published, sink et AnyCancellable
Objectif
Comprendre le minimum utile de Combine dans une app SwiftUI : publier une valeur, l’écouter, stocker l’abonnement et éviter les retain cycles.
1. Pourquoi Combine existe ?
Combine sert à gérer des flux de valeurs dans le temps.
Exemples :
- texte tapé dans un champ ;
- état d’un ViewModel ;
- résultat d’une recherche ;
- validation de formulaire ;
- événement utilisateur ;
- données qui changent.
SwiftUI utilise déjà une partie de cette logique avec ObservableObject et @Published.
2. @Published
Quand count change, les vues SwiftUI qui observent le ViewModel peuvent se recomposer.
Ici, pas besoin d’écrire sink. SwiftUI observe automatiquement l’objet.
3. sink
sink sert à écouter manuellement un publisher.
$query représente le publisher associé à la propriété query.
4. AnyCancellable
Un abonnement Combine doit être conservé. Sinon, il s’arrête immédiatement.
Puis :
Quand le ViewModel est détruit, les abonnements sont annulés automatiquement.
5. Exemple : observer une valeur et mettre à jour une autre
Ici, isFormValid se met à jour automatiquement quand email ou password change.
Même si on ne fait pas une fiche complète sur tous les opérateurs, il faut connaître cette logique.
6. Retain cycle avec sink
Quand tu utilises self dans un sink, fais attention aux retain cycles.
[weak self] évite que le publisher garde fortement le ViewModel en mémoire.
7. Combine vs async/await
async/await est excellent pour une opération ponctuelle :
Combine est utile pour des valeurs qui changent dans le temps :
Résumé
@Publishedpublie les changements d’une propriété.- SwiftUI observe automatiquement les
ObservableObject. sinkpermet d’écouter manuellement un publisher.AnyCancellableconserve l’abonnement.[weak self]évite certains retain cycles.- Combine reste utile pour les flux de valeurs, même avec async/await.