arrays - 如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据
问题描述
我有一个数组列表
私有 var deviceArray:[SearchPeripheral]?= []
我想在 UserDefaults 中保存设备数组的数据,但是当我存储它时它会崩溃。请帮帮我
谢谢你。
解决方案
您不能将自定义模型存储在 UserDefaults 中。您可以进行以下改进以将对象另存为[[String:Any]]
struct SearchPeripheral: Codable {
let name: String
let model: String
}
extension SearchPeripheral {
var dictionary: [String:Any] {
let data = try! JSONEncoder().encode(self)
let any = try! JSONSerialization.jsonObject(with: data)
return any as! [String:Any]
}
init?(_ dict: [String:Any]) {
guard let peripheral = (try? JSONSerialization.data(withJSONObject: dict)).flatMap({
try? JSONDecoder().decode(SearchPeripheral.self, from: $0)
}) else {
return nil
}
self = peripheral
}
}
保存 SearchPeripheral 数组:
func save(_ peripherals: [SearchPeripheral]) {
let allPeripherals = peripherals.compactMap({$0.dictionary})
UserDefaults.standard.set(allPeripherals, forKey: "peripherals")
}
获取 SearchPeripherals 数组:
func getPeripherals() -> [SearchPeripheral] {
let allPeripherals = UserDefaults.standard.array(forKey: "peripherals") as? [[String:Any]] ?? []
let peripherals = allPeripherals.compactMap(SearchPeripheral.init)
return peripherals
}
推荐阅读
- asp.net - 2 层列表框的体系结构帮助
- xml - 如何在 SOAP xml 请求元素中设置 xml
- git - GitBucket:无法远程访问
- machine-learning - 每秒帧数对对象检测的意义
- groovy - 获取 groovy 脚本的文件 URI
- ios - 我如何在 epson tm-m30 打印机上设置自动打印 3-4 次打印
- javascript - JavaScript 不会等到 python 执行完成
- bootstrap-4 - bootstrap-table (wenzhixin) 通过服务器的表格分页不起作用
- r - 关闭 candisc 图中的术语标签
- mysql - 为什么我在这里收到 OUTPUT 子句错误?