在Swift 3之前,您可以使用NSCoder解码 bool 值,如下所示:
if let value = aDecoder.decodeObjectForKey(TestKey) as? Bool {
test = value
}
Swift 3中建议的方法是改用以下方法:
aDecoder.decodeBool(forKey: TestKey)
但是
decodeBool
的类引用没有说明如果您要解码的值实际上不是 bool 值,则如何处理这种情况。您不能将decodeBool
嵌入到let语句中,因为返回值不是可选的。如何在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/