Beszélj az adatok kódolásáról és dekódolásáról a UserDefaults-ben.
sobes.tech MI
Válasz az MI-től
A UserDefaults kulcs-érték formátumban tárol adatokat. A nem közvetlenül támogatott egyedi adattípusok (String, Int, Bool, Data, Array, Dictionary) esetén kódolás/dekódolás szükséges. A Codable protokollt használjuk, amely az Encodable és Decodable-t egyesíti.
Egy egyedi típus kódolásának példája:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
A PropertyListEncoder és PropertyListDecoder segítségével Codable objektumokat lehet kódolni/dekódolni Data formátumba a UserDefaults-ban való tároláshoz.
Kódolás:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Dekódolás:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Betöltött felhasználó: \(loadedUser.name), életkor: \(loadedUser.age)")
}
}
Alternatív módszer (kevésbé ajánlott új projektekhez): az NSCoding használata és az öröklődés az NSObject-ből.
Módszerek összehasonlítása:
| Módszer | Protokoll/Típus | Támogatás érték- és referencia típusokra | Szükséges metódusok | Egyszerűség |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Érték és referencia | Automatikus megvalósítás feltételek esetén | Magas |
NSCoding |
NSCoding |
Referencia ( NSObject szükséges) |
init(coder:), encode(with:) |
Közepes |
A Codable a modern és ajánlott megközelítés az egyszerűsége és az automatikus szintézis miatt. Az NSCoding akkor lehet szükséges, ha régi kód támogatására van szükség.