Խոսեք UserDefaults-ում տվյալների կոդավորումը և դեկոդավորումը մասին։
sobes.tech AI
Պատասխան AI-ից
UserDefaults պահպանում է տվյալները բանալի-արժեք ձևաչափով: Տարբերակային տվյալների տեսակների համար, որոնք ուղղակիորեն չեն աջակցվում (String, Int, Bool, Data, Array, Dictionary), անհրաժեշտ է կոդավորել/դեկոդավորել: Օգտագործվում է Codable պրոտոկոլը, որը միավորում է Encodable և Decodable-ը:
Անհրաժեշտ է հատուկ տիպի կոդավորումը:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
PropertyListEncoder և PropertyListDecoder-ների միջոցով կարելի է կոդավորել/դեկոդավորել Codable օբյեկտները Data-ի մեջ, որոնք պահվում են UserDefaults-ում:
Կոդավորում:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Դեկոդավորում:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Բեռնված օգտվող: \(loadedUser.name), տարիքը: \(loadedUser.age)")
}
}
Այլընտրանքային մեթոդ (քիչ թե ավելի քիչ խորհուրդ է տրվում նոր նախագծերի համար). օգտագործել NSCoding և ժառանգել NSObject-ից:
Մեթոդների համեմատություն:
| Մեթոդ | Պրոտոկոլ/Սինֆոն | Աջակցում է արժեքային/հղման տիպերին | Պահանջվող մեթոդներ | Հեշտություն |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Արժեքային և հղման | Ավտոմատ իրականացում պայմանների բավարարության դեպքում | Բարձր |
NSCoding |
NSCoding |
Հղման (պահանջում է NSObject) |
init(coder:), encode(with:) |
Միջին |
Codable-ը ժամանակակից և խորհուրդ է տրվում օգտագործել, քանի որ հեշտ է և ավտոմատ սինթեզվում է: NSCoding-ը կարող է անհրաժեշտ լինել հին կոդի աջակցման համար: