L'enregistrement d'informations dans un fichier plat est une façon simple et rapide de conserver des données de base sous forme de paires clé-valeur.
Les préférences utilisateurs sous SwiftUI sont spécifiquement conçues à cette fin.
Il n'y a pas de limite à la quantité de données qui peuvent être enregistrées dans les préférences utilisateur, sauf si vous programmez pour tvOS (limite de 1 Mo1).
Les préférences utilisateur doivent cependant être réservées à des données peu volumineuses puisqu'un volume de données trop élevé pourrait causer des problèmes de performance.
Pour créer une préférence utilisateur, la technique la plus simple consiste à travailler avec l'attribut @AppStorage (en anglais, on dit que c'est un property wrapper).
Cet attribut est en fait une « enveloppe » alentour de la classe UserDefaults.
Attention : les données enregistrées avec @AppStorage (ou avec UserDefaults) ne sont pas sécurisées. Elle ne doivent donc pas servir à stocker des informations sensibles.
Les variables @AppStorage sont semblable à celles déclarées avec @State : SwiftUI rafraîchira automatiquement la vue dès qu'un changement de valeur est détecté.
Dans cette fiche :
Les informations enregistrées avec @AppStorage sont enregistrées dans un fichier .plist (property list). Aussi, elles sont limitées à certains types de données.
Donc, lorsqu'une variable est déclarée avec l'attribut @AppStorage, elle doit être de l'un de ces types :
Dès qu'une variable est déclarée avec @AppStorage, la valeur de la clé spécifiée est lue dans UserDefaults et est prête à être utilisée.
struct ContentView: View {
@AppStorage("maCle") var maValeur: String = "clé maCle inexistante"
var body: some View {
// si la clé existait, sa valeur sera affichée. Sinon, on verra la valeur qu'on lui a donné par défaut.
Text(maValeur)
}
}
Puisque la variable a été déclarée avec @AppStorage, il suffit de lui assigner une valeur pour que l'information soit enregistrée dans le fichier .plist des préférences utilisateur.
Button("Cliquez ici", action: {
maValeur = "Valeur initialisée par bouton"
})
Si une préférence utilisateur doit d'être utilisée dans plusieurs vues de l'application, il n'y a rien de plus simple : il suffit de redéclarer la préférence utilisateur dans chacune des vues qui en a besoin.
Ainsi, chaque vue aura sa propre variable qui sera liée à la préférence utilisateur.
struct ContentView: View {
@AppStorage("maCle") var maValeur: String = "clé maCle inexistante"
var body: some View {
...
Text(maValeur)
...
}
}
La même déclaration sera faite dans chacune des vues qui a besoin de la préférence utilisateur.
struct AutreVue: View {
@AppStorage("maCle") var maValeur: String = "clé maCle inexistante"
var body: some View {
...
Text(maValeur)
...
}
}
1. « sizeLimitExceededNotification ». Apple. https://developer.apple.com/documentation/foundation/userdefaults/1617187-sizelimitexceedednotification
▼Publicité