Sobes.tech
Junior

User Defaults колдонуп маалыматтардын түзүмүн сактап жана окуу кандай?

sobes.tech AI

AIден жооп

User Defaults гана чектелген түрлөрдүн топтомун сактайт: Data, String, Number, Date, Array, Dictionary. Өзгөчө түзүмдөрдү сактоо үчүн аларды Dataке коддоо жана кайра декоддоо керек.

Codable протоколу колдонулат (Encodable жана Decodable бирикмеси).

  1. Түзүмдү аныктоо: Түзүм Codable протоколуна ылайык болушу керек.

    struct MyData: Codable {
        let id: Int
        let name: String
        let isActive: Bool
    }
    
  2. Сактоо: Түзүмдү Dataке коддоо жана User Defaultsке сактоо.

    let myStruct = MyData(id: 1, name: "Example", isActive: true)
    
    // Коддоо
    let encoder = JSONEncoder()
    if let encodedData = try? encoder.encode(myStruct) {
        // сактоо
        UserDefaults.standard.set(encodedData, forKey: "myCustomData")
    } else {
        // ката аныктоо
        print("Failed to encode struct")
    }
    
  3. Окуу: User Defaultsтен Data алуу жана кайра структурага декоддоо.

    if let savedData = UserDefaults.standard.data(forKey: "myCustomData") {
        let decoder = JSONDecoder()
        if let loadedStruct = try? decoder.decode(MyData.self, from: savedData) {
            print("Loaded struct: \(loadedStruct)")
        } else {
            print("Failed to decode data")
        }
    } else {
        print("No data found for key")
    }
    

Негизги учурлар:

  • User Defaults чоң көлөмдөгү маалыматтарды же сырдуу маалыматтарды сактоо үчүн арналган эмес.
  • Codable жана JSONEncoder/JSONDecoder колдонуу — өзгөчө типтерди сактоо үчүн стандарттык ыкма.
  • try? колдонуп, ката кетсе аны иштетүү керек.
  • Масивдерди сактоо да Codable аркылуу жүргүзүлөт.
// Масив түзүмдөрдү сактоо мисалы
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")
}

// Масив түзүмдөрдү окуу мисалы
if let savedArrayData = UserDefaults.standard.data(forKey: "myCustomArray") {
    let decoder = JSONDecoder()
    if let loadedArray = try? decoder.decode([MyData].self, from: savedArrayData) {
        print("Loaded array: \(loadedArray)")
    }
}