如果使用错误的NSCoding函数解码数据类型,则应用程序崩溃。例如,如果DoubleKey
实际上表示decodeInteger
所预期的double而不是整数,则此行将崩溃:
let isReallyDouble = aDecoder.decodeInteger(forKey: DoubleKey)
在解码之前如何验证数据类型?如果应用程序的版本1将某个值编码为整数,但版本5必须将该变量更改为double,这一点很重要。
这适用于Swift 3,其中decodeObject
不适用于整数和双精度等值类型:Swift 3 saving and retrieving custom object from userDefaults
导致崩溃,而不是返回nil
,当数据类型不匹配时,似乎是一个非常糟糕的设计选择。
苹果公司在2018年的WWDC上发表了一篇名为“你可信赖的数据”的演讲。其中一个主题讨论了NSCodeable对象的解码。请参阅以下链接以访问该演讲。强烈推荐。