Sobes.tech
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.