Sobes.tech
Junior

Pověz o kódování a dekódování dat v UserDefaults.

sobes.tech AI

Odpověď od AI

UserDefaults ukládá data ve formátu klíč-hodnota. Pro typy datových struktur, které nejsou přímo podporovány (String, Int, Bool, Data, Array, Dictionary), je potřeba kódování/dekódování. Používá se protokol Codable, který kombinuje Encodable a Decodable.

Příklad kódování vlastního typu:

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

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

Pomocí PropertyListEncoder a PropertyListDecoder lze kódovat/dekódovat objekty Codable do Data pro ukládání v UserDefaults.

Kódování:

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

Dekódování:

if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
    let decoder = PropertyListDecoder()
    if let loadedUser = try? decoder.decode(User.self, from: savedData) {
        print("Načtený uživatel: \(loadedUser.name), věk: \(loadedUser.age)")
    }
}

Alternativní způsob (méně doporučený pro nové projekty): použití NSCoding s děděním od NSObject.

Porovnání metod:

Metoda Protokol/Třída Podpora hodnotových/referenčních typů Vyžadované metody Jednoduchost
Codable Codable (Encodable, Decodable) Hodnotové & Referenční Automatická implementace při splnění podmínek Vysoká
NSCoding NSCoding Referenční (vyžaduje NSObject) init(coder:), encode(with:) Střední

Codable je moderní a doporučený přístup díky jednoduchosti použití a automatické syntéze. NSCoding může být potřeba pro podporu starého kódu.