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.