【发布时间】:2018-11-15 15:09:44
【问题描述】:
我是 Swift 新手(C++ 背景),我正在尝试做一件非常简单的事情:保存一个 Bool。如果我将 bool 转换为 "A" 或 "B" 的字符串,然后再转换回来,它可以完美地工作,但是如果我直接使用 encode 和 aDecoder 保存 bool,则 Bool 每次都会返回 nil。在互联网上找不到任何关于它的信息。
正如您在下面看到的,我只需将字符串替换为 Bool 即可。
func boolwontsave(aBool:Bool) -> String {
if aBool {
return "A"
}
return "B"
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: PropertyKey.name)
aCoder.encode(number, forKey: PropertyKey.number)
aCoder.encode(boolwontsave(aBool: ispresent), forKey: PropertyKey.present)
}
required convenience init?(coder aDecoder: NSCoder) {
// The name is required. If we cannot decode a name string, the initializer should fail.
guard let name = aDecoder.decodeObject(forKey: PropertyKey.name) as? String else {
os_log("Unable to decode the name for a player object.", log: OSLog.default, type: .debug)
return nil
}
let number = aDecoder.decodeObject(forKey: PropertyKey.number) as? String
guard let localpresent = aDecoder.decodeObject(forKey: PropertyKey.present) as? String else {
print("got the nil")
os_log("Unable to decode the ispresent for a player object.", log: OSLog.default, type: .debug)
return nil
}
// Must call designated initializer.
self.init(name:name, number:number, present: localpresent == "A")
}
布尔值不应该保存吗?这似乎不优雅。
【问题讨论】:
-
你说“保存一个布尔值”是什么意思。另外请提供一个代码,您尝试检索您的布尔值并返回 nil。
-
一个更大的问题是你为什么在 Swift 中使用
NSCoding和NSCoder。您没有使用 SwiftCodable功能是否有原因?