我有一本[String: [MyObject]]這樣的字典:
[
"aKey": [MyObject, MyObject...],
"anotherKey": [MyObject...]
]
我將它存盤在磁盤上。每個鍵的值中都會包含大量資料。我希望既能檢索整個字典,又能檢索單個鍵的值,而不必從磁盤檢索整個字典。這可能嗎?
我目前像這樣寫和讀我的字典:
func write(
_ value: [String: [MyObject]],
forKey: String
) {
let data = NSKeyedArchiver.archivedData(withRootObject: value)
writeDataToDisk(data: data, key: key)
}
func read(
_ key: String
) -> [String: [MyObject]]? {
guard let dataFromDisk = fileManager.contents(atPath: cachePath(forKey: key)) else {
return nil
}
guard let data = NSKeyedUnarchiver.unarchiveObject(with: data) as? Data else {
return nil
}
do {
return try JSONDecoder().decode([String: [MyObject]].self, from: data)
} catch {
return nil
}
}
uj5u.com熱心網友回復:
Joakim 已經給你一個相當完整的答案作為評論,但我會稍微充實一下作為答案。
大多數將字典序列化/反序列化到磁盤的方法都可以讀寫整個字典。
NSKeyedArchiver, Codable, JSONSerialization, plist- 它們都處理整個物件圖。
如果您想使用其中一種方法讀取/寫入單個物件,則必須將每個物件保存到單獨的檔案中。
或者,使用資料庫來存盤您的物件。Core Data、SQLite 和其他各種可能性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489118.html
上一篇:使用可選欄位解碼json
