Sobes.tech
Junior

Parla di codifica e decodifica dei dati in UserDefaults.

sobes.tech AI

Risposta dell'AI

UserDefaults memorizza i dati in formato chiave-valore. Per tipi di dati personalizzati non supportati direttamente (String, Int, Bool, Data, Array, Dictionary), è necessaria la codifica/decodifica. Si utilizza il protocollo Codable, che combina Encodable e Decodable.

Esempio di codifica di un tipo personalizzato:

struct User: Codable {
    let name: String
    let age: Int
}

let user = User(name: "Иван", age: 30)

Con PropertyListEncoder e PropertyListDecoder è possibile codificare/decodificare oggetti Codable in Data per la memorizzazione in UserDefaults.

Codifica:

let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
    UserDefaults.standard.set(encoded, forKey: "currentUser")
}

Decodifica:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Utente caricato: \(loadedUser.name), età: \(loadedUser.age)")
    }
}

Alternativa (meno preferibile per nuovi progetti): utilizzo di NSCoding con ereditarietà da NSObject.

Confronto metodi:

Metodo Protocollo/Classe Supporto per Tipi di Valore/Riferimento Metodi richiesti Facilità
Codable Codable (Encodable, Decodable) Valore & Riferimento Implementazione automatica se le condizioni sono soddisfatte Alta
NSCoding NSCoding Riferimento (richiede NSObject) init(coder:), encode(with:) Media

Codable è l'approccio moderno e raccomandato per la sua semplicità d'uso e la generazione automatica. NSCoding può essere necessario per supportare codice legacy.