Sobes.tech
Junior

Реци о кодирању и декодирању података у UserDefaults.

sobes.tech АИ

Одговор од АИ

UserDefaults čuva podatke u formatu ključ-vrednost. Za prilagođene tipove podataka koji nisu direktno podržani (String, Int, Bool, Data, Array, Dictionary), potrebna je kodiranje/dekodiranje. Koristi se protokol Codable, koji kombinuje Encodable i Decodable.

Primer kodiranja prilagođenog tipa:

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

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

Uz PropertyListEncoder i PropertyListDecoder može se kodirati/dekodirati Codable objekti u Data za skladištenje u UserDefaults.

Kodiranje:

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

Dekodiranje:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Učitani korisnik: \(loadedUser.name), starost: \(loadedUser.age)")
    }
}

Alternativni način (manje preporučljiv za nove projekte): korišćenje NSCoding sa nasleđivanjem od NSObject.

Poređenje metoda:

Metod Protokol/Klasa Podrška za vrednosne/referentne tipove Potrebne metode Jednostavnost
Codable Codable (Encodable, Decodable) Vrednosne i referentne Automatska implementacija ako su uslovi ispunjeni Visoka
NSCoding NSCoding Referentni (zahteva NSObject) init(coder:), encode(with:) Srednja

Codable je savremeni i preporučeni pristup zbog jednostavnosti korišćenja i automatske sinteze. NSCoding može biti potreban za podršku starom kodu.