Sobes.tech
Junior

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.