【发布时间】:2017-02-01 01:05:55
【问题描述】:
在 Swift 3 之前,您可以像这样使用 NSCoder 解码布尔值:
if let value = aDecoder.decodeObjectForKey(TestKey) as? Bool {
test = value
}
在 Swift 3 中建议的方法是改用这个:
aDecoder.decodeBool(forKey: TestKey)
但是decodeBool 的类参考并没有解释如果您正在解码的值实际上不是布尔值,如何处理这种情况。您不能在 let 语句中嵌入 decodeBool,因为返回值不是可选的。
如何在 Swift 3 中安全地解码值?
【问题讨论】:
-
如果没有提供给 aDecoder.decodeBool 的布尔值,它会引发错误,因为它只等待布尔值。所以你必须确定它是 Bool,不是吗?
-
正确,因此检查@pedrouan 不是一种安全的方法。 swift 2 语法会捕获该错误。
-
你必须知道你正在编码的类型。这在某些情况下有点困难,特别是因为
Bool被编码为Bool而Bool?被编码为Object。见stackoverflow.com/questions/38072295/…。