如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据
Posted
技术标签:
【中文标题】如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据【英文标题】:How to set custom class array data in UserDefalts in swift 4 【发布时间】:2021-01-30 16:05:01 【问题描述】:我有一个数组列表
私有 var deviceArray: [SearchPeripheral]? = []
我想在 UserDefaults 中保存设备数组的数据,但是当我存储它时它会崩溃。 请帮我解决一下
谢谢。
【问题讨论】:
【参考方案1】:您不能将自定义模型存储在 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
【讨论】:
以上是关于如何在 swift 4 中的 UserDefalts 中设置自定义类数组数据的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4 - 如何从嵌套在 UICollectionViewCell 中的按钮以编程方式激活 segue
如何使用swift 4查看Multipeer Connectivity框架中的MCBrowserViewController
如何在swift 4中从WKWebView中的网页中删除DIV标签?