Pasakok apie duomenų kodavimą ir dekodavimą UserDefaults.
sobes.tech AI
Atsakymas iš AI
UserDefaults saugo duomenis kaip raktas-reikšmė poros. Tiesiogiai nepalaikomų naudotojo duomenų tipų (String, Int, Bool, Data, Array, Dictionary) kodavimas/dekodavimas yra reikalingas. Tai atliekama naudojant Codable protokolą, kuris jungia Encodable ir Decodable.
Pavyzdys naudotojo tipo kodavimui:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
Naudojant PropertyListEncoder ir PropertyListDecoder, galima koduoti/dekoduoti Codable objektus į Data formatą, skirtą saugoti UserDefaults.
Kodavimas:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Dekodavimas:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Įkeltas naudotojas: \(loadedUser.name), amžius: \(loadedUser.age)")
}
}
Alternatyvus būdas (mažiau rekomenduojamas naujiems projektams): naudoti NSCoding su paveldėjimu iš NSObject.
Metodų palyginimas:
| Metodas | Protokolas/Klasė | Vertės/nuorodos tipų palaikymas | Reikalingi metodai | Paprastumas |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Vertės ir nuorodos | Automatinė įgyvendinimas pagal sąlygas | Aukštas |
NSCoding |
NSCoding |
Nuoroda (reikalauja NSObject) |
init(coder:), encode(with:) |
Vidutinis |
Codable yra modernus ir rekomenduojamas požiūris dėl paprastumo ir automatinio generavimo. NSCoding gali būti reikalingas senesniam kodui palaikyti.