Junior
Rääkige andmete kodeerimisest ja dekodeerimisest UserDefaults'is.
sobes.tech AI
Vastus AI-lt
UserDefaults salvestab andmeid võtme-väärtuse paarina. Otse toetatavate kasutaja tüüpide (String, Int, Bool, Data, Array, Dictionary) jaoks on vaja kodeerida/dekodeerida. Seda tehakse Codable protokolli abil, mis ühendab Encodable ja Decodable.
Kasutajatüübi kodeerimise näide:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
PropertyListEncoder ja PropertyListDecoder abil saab kodeerida/dekodeerida Codable objekte Data formaati, et neid salvestada UserDefaults.
Kodeerimine:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Dekodeerimine:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Laaditud kasutaja: \(loadedUser.name), vanus: \(loadedUser.age)")
}
}
Alternatiivne viis (vähem soovitatav uutes projektides): kasutada NSCoding koos pärimisega NSObject-ist.
Meetodite võrdlus:
| Meetod | Protokoll/Klass | Väärtuste/viite tüüpide tugi | Nõutavad meetodid | Lihtsus |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Väärtused ja viited | Automaatne teostus tingimustel | Kõrge |
NSCoding |
NSCoding |
Viited (nõuab NSObject) |
init(coder:), encode(with:) |
Keskmine |
Codable on kaasaegne ja soovitatav lähenemine, kuna see on lihtne kasutada ja automaatselt genereeritav. NSCoding võib olla vajalik vanema koodi toetamiseks.