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.
-
Tuzilmani aniqlash: Tuzilma
Codableprotokoliga mos kelishi kerak.struct MyData: Codable { let id: Int let name: String let isActive: Bool } -
Saqlash: Tuzilmani
JSONEncoderyordamidaDataga 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") } -
O'qish: User Defaults dan
Datani o'qib,JSONDecoderyordamida 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.
CodablevaJSONEncoder/JSONDecoderyordamida maxsus turlarniDataga saqlash standart usuldir.try?dan foydalanish va ehtimoliy xatolarni boshqarish zarur.- Tuzilma massivlarini saqlash uchun ham
Codableishlatiladi.
// 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)")
}
}