Vorbește despre codificarea și decodificarea datelor în UserDefaults.
sobes.tech AI
Răspuns de la AI
UserDefaults stochează date în format cheie-valoare. Pentru tipuri de date personalizate care nu sunt suportate direct (String, Int, Bool, Data, Array, Dictionary), este necesară codificarea/decodificarea. Se folosește protocolul Codable, care combină Encodable și Decodable.
Exemplu de codificare a unui tip personalizat:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Cu PropertyListEncoder și PropertyListDecoder se pot codifica/decodifica obiecte Codable în Data pentru stocare în UserDefaults.
Codificare:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Decodificare:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Utilizator încărcat: \(loadedUser.name), vârsta: \(loadedUser.age)")
}
}
O metodă alternativă (mai puțin recomandată pentru proiecte noi): utilizarea NSCoding cu moștenire de la NSObject.
Compararea metodelor:
| Metodă | Protocol/Sinif | Suport pentru Tipuri Value/Reference | Metode necesare | Ușurință |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Value & Reference | Implementare automată dacă condițiile sunt îndeplinite | Înaltă |
NSCoding |
NSCoding |
Reference (necesită NSObject) |
init(coder:), encode(with:) |
Medie |
Codable este abordarea modernă și recomandată datorită ușurinței de utilizare și generării automate. NSCoding poate fi necesar pentru compatibilitatea cu codul vechi.