Fiche 02.09 — @SceneStorage en SwiftUI
Objectif
Comprendre à quoi sert @SceneStorage, quelle différence faire avec @State et @AppStorage, et dans quels cas il peut être utile.
1. L’idée à comprendre
@SceneStorage sert à conserver temporairement une valeur liée à une scène de l’app.
Une scène correspond à une instance d’interface de ton app.
Sur iPhone, tu peux souvent retenir simplement :
Exemple :
Si l’utilisateur tape une recherche, quitte l’écran ou si la scène est restaurée, SwiftUI peut retrouver cette valeur.
2. Code minimal
Ici, searchText est sauvegardé comme état temporaire de la scène.
3. Différence entre @State, @SceneStorage et @AppStorage
Les trois peuvent stocker une valeur, mais pas avec le même objectif.
Exemple :
À retenir :
4. Exemple : brouillon de texte
@SceneStorage peut être utile pour un texte en cours d’écriture.
Ici, le texte est un état temporaire que tu veux éviter de perdre trop facilement.
5. Exemple : onglet ou filtre temporaire
Tu peux conserver une sélection liée à un écran.
Si la scène est restaurée, le filtre peut être restauré aussi.
6. Types compatibles
@SceneStorage fonctionne surtout avec des types simples.
Exemples :
Types courants :
String;Int;Double;Bool;Data;URL.
Pour des objets complexes, il vaut mieux utiliser un ViewModel, SwiftData, Core Data ou un stockage dédié.
7. Quand utiliser @SceneStorage
Utilise @SceneStorage pour un petit état temporaire d’interface que tu aimerais restaurer.
Exemples :
Exemples de code :
8. Quand ne pas utiliser @SceneStorage
N’utilise pas @SceneStorage pour :
- une session utilisateur ;
- un token ;
- des données sensibles ;
- des données métier importantes ;
- une base locale ;
- une préférence permanente ;
- une liste complexe d’objets ;
- un cache API complet.
Pour ces cas :
9. @SceneStorage vs @AppStorage
@AppStorage est plus durable parce qu’il écrit dans UserDefaults.
Exemple :
C’est une préférence que tu veux conserver longtemps.
@SceneStorage est plutôt lié à l’état temporaire d’une scène.
Exemple :
C’est une valeur utile à restaurer, mais pas forcément une préférence globale.
Résumé :
10. Clés uniques
Comme @AppStorage, @SceneStorage utilise des clés.
Évite de réutiliser la même clé pour deux valeurs différentes dans la même zone de ton app.
Tu peux centraliser les clés :
Puis :
11. Points à connaître
@SceneStorage n’est pas fait pour les données critiques
Il faut le voir comme une aide à la restauration d’interface, pas comme un vrai système de persistance métier.
@SceneStorage est moins fréquent que @State et @AppStorage
Dans beaucoup d’apps, tu utiliseras surtout :
@SceneStorage est plus spécifique.
Le nom de clé compte
Si tu changes la clé, l’ancienne valeur ne sera plus retrouvée.
Résumé
À retenir :
@SceneStorageconserve un petit état temporaire lié à une scène ;- il est utile pour restaurer une recherche, un brouillon ou un filtre ;
- il fonctionne surtout avec des types simples ;
- pour une valeur locale simple, utilise
@State; - pour une préférence durable, utilise
@AppStorage; - pour des données complexes, utilise SwiftData, Core Data ou un stockage adapté ;
- ne l’utilise pas pour des tokens, données sensibles ou données métier importantes.