我想将数据从未知来源保存到UserDefault。 文档说字典必须是有效的属性列表对象。
如果字典不是有效的 plist,则应用崩溃。
class A {}
let invalidDict = [ "Key" : A() ]
UserDefaults.standard.set(invalidDict, forKey: "Key")
// error: Execution was interrupted, reason: signal SIGABRT
我希望它只记录问题而不是崩溃。 用 do catch 块包围是行不通的。
有没有办法防止崩溃或验证任意字典是否为有效的 plist 格式?
class A {}
let invalidDict = [ "Key" : A() ]
PropertyListSerialization.propertyList(invalidDict, isValidFor: .binary) // false
但
let validDict = [ "Key" : "howdy" ]
PropertyListSerialization.propertyList(validDict, isValidFor: .binary) // true