Sobes.tech
Junior

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.