C'est parti ! Nous allons nous lancer concrètement dans la persistance des données. La première technique que nous allons voir ensemble s'appelle UserDefaults. Et vous allez voir que c'est très simple !
Dans cette partie, nous allons utiliser UserDefaults pour retenir la monnaie qu'aura choisie notre utilisateur.
Let's go !
Appréhendez UserDefaults
La définition la plus simple des UserDefaults est :
Un dictionnaire qui persiste.
Vous allez voir que les UserDefaults fonctionnent exactement comme un dictionnaire. Vous définissez des clés de type String, et vous pouvez y stocker des valeurs. Pour récupérer la valeur, vous utilisez la clé.
Imaginons que vous vouliez stocker le nom de votre utilisateur. Vous allez créer une clé name
dans laquelle vous allez stocker son nom.
Prenons un autre exemple : imaginons que votre application ait un mode sombre. Si votre utilisateur préfère le mode sombre, vous allez stocker cette information avec une clé useDarkMode
.
UserDefaults
Clé | Valeur |
| Pierre |
| true |
Stockez des données de type Property List
Comme vous pouvez le voir dans les exemples que j'ai utilisés précédemment, vous pouvez stocker des types différents dans les User Defaults.
C'est un peu comme si UserDefaults était un dictionnaire de type [String: Any]
. Seulement ce n'est pas tout à fait vrai.
Dans les UserDefaults, vous ne pouvez stocker que des données de type Property List.
C'est quoi, une donnée de type Property List ?
C'est n'importe quelle combinaison des types suivants :
Array
;Dictionary
;String
;Date
;Data
;Nombre (
Int
,Double
,Float
).
Cela veut dire que vous pouvez stocker des entiers, tableaux, chaînes de caractères, etc., dans les UserDefaults. Mais aussi n'importe quelle combinaison de ces types.
Par exemple, tous les types suivants peuvent être sauvegardés dans les UserDefaults :
String
[Int]
Date
[String: Data]
[[String: [[Int: Data]]]]
C'est donc suffisamment flexible pour stocker tout un tas de données ! Mais en revanche, si vous avez créé un type comme notre structure Spending
, vous ne pouvez pas la stocker telle quelle dans les UserDefaults.
var spendingDict: [String: Any] = ["content": "Pizzeria", "amount": 12]
À cause de cette contrainte et de la petite étendue des capacités de cette technologie, on utilise les UserDefaults généralement pour sauvegarder des données très simples, comme les préférences d'un utilisateur.
Même s'il y a quelques variantes, UserDefaults a deux méthodes très simples pour lire/écrire des données :
// Ecrire des données
func set(Any?, forKey: String) // Any doit être une Property List, sinon crash.
// Lire des données
func object(forKey: String) -> Any? // Any est forcément une Property List.
Et voilà, vous savez tout sur les UserDefaults ! Je vous avais dit que c'était vraiment très simple !
En résumé
UserDefaults est un dictionnaire persistant.
On peut uniquement sauvegarder dans UserDefaults des données de type Property List.
On utilise principalement deux méthodes,
set(Any?, forKey: String)
etobject(forKey: String) -> Any?
pour lire et écrire des données.
Dans le prochain chapitre, nous allons utiliser UserDefaults pour sauvegarder la monnaie choisie par l'utilisateur !