验证字典是有效的 plist(在保存到用户默认值之前)

Validate that a Dictionary is a valid plist (before saving to user defaults)

我想将来自未知来源的数据保存到 UserDefault。文档说字典必须是 valid Property List object

如果字典不是有效的 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