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-ի և պահել User Defaults-ում:let myStruct = MyData(id: 1, name: "Example", isActive: true) // Կոդավորում Data-ով let encoder = JSONEncoder() if let encodedData = try? encoder.encode(myStruct) { // Պահպանում Data-ով UserDefaults.standard.set(encodedData, forKey: "myCustomData") } else { // Կոդավորման սխալի մշակումը print("Failed to encode struct") } -
Կարդալ: Կարդալ Data-ը 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-ի օգտագործումը ստանդարտ էհատուկ տիպերի պահպանումը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)")
}
}