Junior
როგორ შევინახოთ და წავიკითხოთ მონაცემთა სტრუქტურა User Defaults-ის გამოყენებით?
sobes.tech AI
პასუხი AI-სგან
User Defaults მხოლოდ محدود სახის ტიპებს ინახავს: Data, String, Number, Date, Array, Dictionary. პერსონალური მონაცემთა სტრუქტურების შენახვა მათ უნდა კოდირდეს Data-ში და შემდეგ დეკოდირდეს უკან.
გამოყენებულია Codable პროტოკოლი (შერეული Encodable და Decodable).
-
სტრუქტურის განსაზღვრა: სტრუქტურამ უნდა შეესაბამებოდეს
Codable-ს.struct MyData: Codable { let id: Int let name: String let isActive: Bool } -
შენახვა: სტრუქტურის კოდირება
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") } -
კითხვა: 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)")
}
}