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.