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) { // нигоҳ доштан дар Data бо калид UserDefaults.standard.set(encodedData, forKey: "myCustomData") } else { // коркарди хато дар кодгузорӣ print("Failed to encode struct") } -
Хондан: хондани
Dataаз User Defaults ва декод кардани он ба сохтор бо ёрииJSONDecoder.// гирифтани Data бо калид if let savedData = UserDefaults.standard.data(forKey: "myCustomData") { // декод кардани Data ба сохтор 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)")
}
}