Sobes.tech
Junior

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.