Junior
Porozprávaj o kódovaní a dekódovaní dát v UserDefaults.
sobes.tech AI
Odpoveď od AI
UserDefaults uchováva dáta vo formáte kľúč-hodnota. Pre vlastné typy dát, ktoré nie sú priamo podporované (String, Int, Bool, Data, Array, Dictionary), je potrebné kódovanie/dekódovanie. Používa sa protokol Codable, ktorý spája Encodable a Decodable.
Príklad kódovania vlastného typu:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Pomocou PropertyListEncoder a PropertyListDecoder je možné kódovať/dekódovať objekty Codable do Data na uloženie v UserDefaults.
Kódovanie:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Dekódovanie:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Načítaný používateľ: \(loadedUser.name), vek: \(loadedUser.age)")
}
}
Alternatívny spôsob (menej odporúčaný pre nové projekty): použitie NSCoding s dedičnosťou od NSObject.
Porovnanie metód:
| Metóda | Protokol/Trieda | Podpora pre hodnotové/referenčné typy | Vyžadované metódy | Jednoduchosť |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Hodnotové a referenčné | Automatická implementácia pri splnení podmienok | Vysoká |
NSCoding |
NSCoding |
Referenčný (vyžaduje NSObject) |
init(coder:), encode(with:) |
Stredná |
Codable je moderný a odporúčaný prístup kvôli jednoduchej použiteľnosti a automatickej syntéze. NSCoding môže byť potrebný na podporu staršieho kódu.