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-ში JSONEncoder-ის დახმარებით და შენახვა User Defaults-ში.

    let myStruct = MyData(id: 1, name: "Example", isActive: true)
    
    // კოდირება Data-ში
    let encoder = JSONEncoder()
    if let encodedData = try? encoder.encode(myStruct) {
        // შენახვა
        UserDefaults.standard.set(encodedData, forKey: "myCustomData")
    } else {
        // კოდირების შეცდომის დამუშავება
        print("Failed to encode struct")
    }
    
  3. კითხვა: Data-ის მიღება User Defaults-დან და დეკოდირება სტრუქტურაში JSONDecoder-ის დახმარებით.

    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 გამოყენება — სტანდარტული მეთოდი პერსონალური ტიპების შენახვისთვის Data-ში.
  • საჭიროა 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)")
    }
}