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.