Fiche 02.01 — Comprendre l’état en SwiftUI
Objectif
Comprendre ce qu’est un état en SwiftUI, pourquoi une vue se met à jour quand une donnée change, et pourquoi SwiftUI fonctionne avec une logique déclarative.
1. L’idée à comprendre
En SwiftUI, l’interface est une conséquence de l’état actuel.
Tu ne dis pas directement à l’interface :
Tu changes une donnée, et SwiftUI affiche automatiquement l’interface correspondant à cette donnée.
Exemple :
Ici, l’écran dépend de isLoading.
Si isLoading == true, SwiftUI affiche le loader.
Si isLoading == false, SwiftUI affiche le texte.
2. Code minimal
Ce qu’il se passe :
3. C’est quoi un état ?
Un état est une donnée qui peut changer et qui influence l’interface.
Exemples d’états :
Ces valeurs peuvent modifier ce que l’utilisateur voit.
Exemple :
4. Interface déclarative
SwiftUI est déclaratif.
Ça veut dire que tu décris le résultat voulu selon l’état actuel.
Exemple :
Tu ne modifies pas manuellement le texte ou la couleur.
Tu dis simplement :
SwiftUI fait la mise à jour quand isLoggedIn change.
5. Le body peut être relu plusieurs fois
Quand un état change, SwiftUI peut relire le body de la vue.
C’est normal.
Le body doit donc rester léger.
À éviter :
Préférable :
Le body décrit l’interface. Les actions, chargements et appels réseau doivent être déclenchés ailleurs, par exemple dans .task, dans un bouton, ou dans un ViewModel.
6. Les états principaux en SwiftUI
SwiftUI propose plusieurs manières de gérer l’état.
Les plus importantes :
On les verra un par un dans les fiches suivantes.
7. Exemple : état loading / content
Un cas très courant : afficher un loader pendant un chargement.
Ici :
isLoadingest l’état ;- la vue dépend de cet état ;
- quand
isLoadingchange, SwiftUI met à jour l’affichage.
8. Exemple : état empty / loaded
Autre cas fréquent : afficher une liste ou un message vide.
Ici, l’interface dépend du contenu de users.
9. Exemple : enum d’état d’écran
Quand un écran devient plus complet, tu peux représenter son état avec une enum.
Cette approche est utile pour éviter d’avoir trop de booléens comme :
Une enum permet de dire clairement :
10. Points à connaître
L’état doit avoir une seule source de vérité
Évite de dupliquer la même information dans plusieurs variables.
Pas idéal :
Le problème : isEmpty peut devenir faux par rapport à users.
Préférable :
Puis dans le body :
Ici, la source de vérité est users.
Un état local doit rester local
Si une donnée ne concerne qu’une vue, @State suffit.
Exemples :
Mais si la donnée doit être partagée avec plusieurs écrans, il faudra utiliser autre chose, comme un ViewModel, un EnvironmentObject, ou un service.
Trop de booléens peuvent rendre un écran confus
Exemple fragile :
Que se passe-t-il si isLoading == true et isError == true en même temps ?
Pour les états d’écran complexes, une enum est souvent plus claire.
Résumé
À retenir :
- un état est une donnée qui peut changer et influencer l’interface ;
- SwiftUI affiche l’interface correspondant à l’état actuel ;
- quand un état change, SwiftUI peut relire le
body; - le
bodydoit rester léger ; @Statesert à stocker un état local ;- il existe plusieurs outils d’état :
@State,@Binding,@StateObject,@ObservedObject,@EnvironmentObject, etc. ; - évite de dupliquer la même information dans plusieurs états ;
- pour un écran complexe, une enum d’état peut être plus propre que plusieurs booléens.