UserDefaults'da ma'lumotlarni kodlash va dekodlash haqida gapir.
sobes.tech AI
AIdan javob
UserDefaults kalit-qiymat formatida ma'lumotlarni saqlaydi. To'g'ridan-to'g'ri qo'llab-quvvatlanmaydigan (String, Int, Bool, Data, Array, Dictionary) maxsus ma'lumot turlarini kodlash/dekodlash talab qilinadi. Codable protokoli ishlatiladi, u Encodable va Decodable ni birlashtiradi.
Maxsus turni kodlash misoli:
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Иван", age: 30)
PropertyListEncoder va PropertyListDecoder yordamida Codable ob'ektlarni Data ga kodlash/dekodlash mumkin, bu esa UserDefaultsda saqlash uchun.
Kodlash:
let encoder = PropertyListEncoder()
if let encoded = try? encoder.encode(user) {
UserDefaults.standard.set(encoded, forKey: "currentUser")
}
Dekodlash:
if let savedData = UserDefaults.standard.data(forKey: "currentUser") {
let decoder = PropertyListDecoder()
if let loadedUser = try? decoder.decode(User.self, from: savedData) {
print("Yuklangan foydalanuvchi: \(loadedUser.name), yosh: \(loadedUser.age)")
}
}
Boshqa usul (yangi loyihalar uchun kamroq tavsiya etiladi): NSCoding dan foydalanish va NSObject dan meros olish.
Usullarni taqqoslash:
| Usul | Protokol/Sinf | Qiymat/Refarans turlarini qo'llab-quvvatlash | Kerakli metodlar | Osonlik |
|---|---|---|---|---|
Codable |
Codable (Encodable, Decodable) |
Qiymat va Refarans | Shartlar bajarilsa avtomatik amalga oshirish | Yuqori |
NSCoding |
NSCoding |
Refarans ( NSObject talab qilinadi) |
init(coder:), encode(with:) |
O'rtacha |
Codable zamonaviy va tavsiya etilgan yondashuv bo'lib, foydalanish osonligi va avtomatik sintez uchun mo'ljallangan. NSCoding eski kodlarni qo'llab-quvvatlash uchun kerak bo'lishi mumkin.