在 Swift 3 之前,您可以像这样使用 NSCoder 解码 bool 值:
if let value = aDecoder.decodeObjectForKey(TestKey) as? Bool {
test = value
}
Swift 3 中建议的方法是改用它:
aDecoder.decodeBool(forKey: TestKey)
但是 decodeBool
的类引用没有解释如果您正在解码的值实际上不是 bool 值时如何处理这种情况。您不能在 let 语句中嵌入 decodeBool
,因为返回值不是可选的。
如何在 Swift 3 中安全地解码值?
最佳答案
我花了很长时间才弄清楚,但你仍然可以像这样解码值。 我在使用 swift3 时遇到的问题是编码方法的重命名:
// swift2:
coder.encodeObject(Any?, forKey:String)
coder.encodeBool(Bool, forKey:String)
// swift3:
coder.encode(Any?, forKey: String)
coder.encode(Bool, forKey: String)
因此,当您使用 coder.encode(boolenValue, forKey: "myBool")
对 bool 值进行编码时,您必须使用 decodeBool
对其进行解码,但是当您像这样对其进行编码时:
let booleanValue = true
coder.encode(booleanValue as Any, forKey: "myBool")
你仍然可以像这样解码它:
if let value = coder.decodeObject(forKey: "myBool") as? Bool {
test = value
}
关于 swift 3 : Safe way to decode values with NSCoder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39656225/