Parlez de l'encodage et du décodage des données dans UserDefaults.
sobes.tech IA
Réponse de l'IA
UserDefaults stocke les données au format clé-valeur. Pour les types de données personnalisés non pris en charge directement (String, Int, Bool, Data, Array, Dictionary), une codification/décodification est nécessaire. Le protocole Codable, qui combine Encodable et Decodable, est utilisé.
Exemple de codage d'un type personnalisé:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Avec PropertyListEncoder et PropertyListDecoder, on peut encoder/décoder des objets Codable en Data pour les stocker dans UserDefaults.
Codage:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Décodage:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Utilisateur chargé: \(loadedUser.name), âge: \(loadedUser.age)")
}
}
Une autre méthode (moins recommandée pour les nouveaux projets): utiliser NSCoding avec héritage de NSObject.
Comparaison des méthodes:
| Méthode | Protocole/Classe | Supporte les Types Valeur/Référence | Méthodes requises | Facilité |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Valeur & Référence | Implémentation automatique si conditions remplies | Élevée |
NSCoding |
NSCoding |
Référence (nécessite NSObject) |
init(coder:), encode(with:) |
Moyenne |
Codable est la méthode moderne et recommandée grâce à sa simplicité d'utilisation et sa synthèse automatique. NSCoding peut être nécessaire pour la compatibilité avec du code ancien.