Formation PUB900 : Développer une application pour iPhone avec SwiftUI, H-2024 Les préférences utilisateur

31.1 @AppStorage


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 :

Types de données acceptés

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 :

  • String
  • Int
  • Bool
  • Double
  • URL
  • Data

Retrouver la valeur enregistrée pour une clé

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.

SwiftUI

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)
    }
}

Enregistrer une paire clé-valeur

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.

SwiftUI

Button("Cliquez ici", action: {
    maValeur = "Valeur initialisée par bouton"
})

Valeur utilisée dans plusieurs vues

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.

SwiftUI

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.

SwiftUI

struct AutreVue: View {
    @AppStorage("maCle") var maValeur: String = "clé maCle inexistante"

    var body: some View {
        ...
        Text(maValeur)
        ...
    }
}

Source

1. « sizeLimitExceededNotification ». Apple. https://developer.apple.com/documentation/foundation/userdefaults/1617187-sizelimitexceedednotification

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre