Sobes.tech
Junior

Foydalanuvchi sozlamalaridan foydalanib, ma'lumotlar tuzilmasini qanday saqlash va o'qish mumkin?

sobes.tech AI

AIdan javob

User Defaults faqat cheklangan turdagi ma'lumotlarni saqlaydi: Data, String, Number, Date, Array, Dictionary. Maxsus ma'lumot tuzilmalarini saqlash uchun ularni Data ga kodlash va qayta dekodlash kerak.

Codable protokoli (Encodable va Decodable ning kombinatsiyasi) ishlatiladi.

  1. Tuzilmani aniqlash: Tuzilma Codable protokoliga mos kelishi kerak.

    struct MyData: Codable {
        let id: Int
        let name: String
        let isActive: Bool
    }
    
  2. Saqlash: Tuzilmani JSONEncoder yordamida Data ga kodlash va User Defaults ga saqlash.

    let myStruct = MyData(id: 1, name: "Example", isActive: true)
    
    // Data ga kodlash
    let encoder = JSONEncoder()
    if let encodedData = try? encoder.encode(myStruct) {
        // Kalit bilan Data saqlash
        UserDefaults.standard.set(encodedData, forKey: "myCustomData")
    } else {
        // Kodlash xatosini boshqarish
        print("Struct kodlashda xato")
    }
    
  3. O'qish: User Defaults dan Data ni o'qib, JSONDecoder yordamida qayta tuzilmaga dekodlash.

    // Kalit bo'yicha Data ni olish
    if let savedData = UserDefaults.standard.data(forKey: "myCustomData") {
        // Data ni tuzilmaga dekodlash
        let decoder = JSONDecoder()
        if let loadedStruct = try? decoder.decode(MyData.self, from: savedData) {
            // Yuklangan tuzilmani ishlatish
            print("Yuklangan tuzilma: \(loadedStruct)")
        } else {
            // Dekodlash xatosini boshqarish
            print("Data dekodlashda xato")
        }
    } else {
        // Ma'lumotlar topilmadi
        print("Kalit uchun ma'lumotlar topilmadi")
    }
    

Asosiy nuqtalar:

  • User Defaults katta hajmdagi ma'lumotlar yoki maxfiy ma'lumotlar uchun mo'ljallanmagan.
  • Codable va JSONEncoder/JSONDecoder yordamida maxsus turlarni Data ga saqlash standart usuldir.
  • try? dan foydalanish va ehtimoliy xatolarni boshqarish zarur.
  • Tuzilma massivlarini saqlash uchun ham Codable ishlatiladi.
// Tuzilma massivini saqlash misoli
let dataArray: [MyData] = [
    MyData(id: 1, name: "A", isActive: true),
    MyData(id: 2, name: "B", isActive: false)
]

let encoder = JSONEncoder()
if let encodedArrayData = try? encoder.encode(dataArray) {
    UserDefaults.standard.set(encodedArrayData, forKey: "myCustomArray")
}

// Tuzilma massivini o'qish misoli
if let savedArrayData = UserDefaults.standard.data(forKey: "myCustomArray") {
    let decoder = JSONDecoder()
    if let loadedArray = try? decoder.decode([MyData].self, from: savedArrayData) {
        print("Yuklangan array: \(loadedArray)")
    }
}