Junior
Pastāsti par datu kodēšanu un dekodēšanu UserDefaults.
sobes.tech AI
Atbilde no AI
UserDefaults glabā datus kā atslēgas-vērtības pāri. Tieši neatbalstītu lietotāja datu tipu (String, Int, Bool, Data, Array, Dictionary) kodēšana/dekodēšana ir nepieciešama. To veic, izmantojot Codable protokolu, kas apvieno Encodable un Decodable.
Piemērs lietotāja tipa kodēšanai:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Ar PropertyListEncoder un PropertyListDecoder var kodēt/dekodēt Codable objektus uz Data formātu, lai tos saglabātu UserDefaults.
Kodēšana:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Dekodēšana:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Ielādēts lietotājs: \(loadedUser.name), vecums: \(loadedUser.age)")
}
}
Alternatīva metode (mazāk ieteicama jaunajiem projektiem): izmantot NSCoding ar mantošanu no NSObject.
Metožu salīdzinājums:
| Metode | Protokols/Klase | Vertības/atsauces tipu atbalsts | Nepieciešamās metodes | Vienkāršība |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Vertes un atsauces tipi | Automātiska īstenošana atbilstoši nosacījumiem | Augsta |
NSCoding |
NSCoding |
Atsauces (prasa NSObject) |
init(coder:), encode(with:) |
Vidēja |
Codable ir mūsdienīgs un ieteicams pieejas veids, pateicoties vienkāršībai un automātiskai ģenerēšanai. NSCoding var būt nepieciešams vecāka koda atbalstam.