@ObservedObject et @Published dans SwiftUI

Combine peut être utilisé dans SwiftUI par le biais des property wrappers @ObservedObject et @Published.

Au quoi sert Combine ?
Combine est une API dédiée au traitement de données asynchrones. Il peut servir dans deux contextes :

  • quand on ne peut pas obtenir la donnée immédiatement (par exemple lors d’une requête web)
  • quand on obtient un flux de données qui reflète un changement en temps réel (par exemple, micro, camera ou autre capteur qui retourne des données numériques).

Imaginons une vue dans Swift UI qui affiche de telles données. On ne sait pas quand elles seront disponibles. Il faut donc que la vue se mette à jour lors que les données arrivent. C’est la que Combine intervient.

Pour commencer, il nous faut un objet publié :

Swift

Ce petit exemple utilise un timer pour affecter à une variable une nouvelle valeur aléatoire chaque seconde.
La variable est publiée avec le wrapper @Published. La classe doit obligatoirement se conformer au protocole ObservableObject pour publier ses variables.

Ensuite, nous créons une vue qui utilise cette objet.

Swift

La séquence est déclarée comme @ObservedObject (ce qui est possible parce qu’elle se conforme au protocole ObservableObject).
La valeur number est utilisée par la vue. Toute mise à jour de la valeur entraînera un rafraichissement de la vue. Et voici ce qui s’affiche :