我是 Swift 新手(C++ 背景),我正在尝试做一件非常简单的事情:保存 Bool。如果我将 bool 转换为“A”或“B”字符串,然后再转换回来,它会完美地工作,但如果我直接使用编码和 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")
}
Run Code Online (Sandbox Code Playgroud)
布尔斯不是应该拯救吗?这看起来很不优雅。
小智 5
使用decodeBool(forKey key: String) 而不是decodeObject(forKey: String)
DecodeBool 解码并返回先前使用encode(_:forKey:) 编码并与字符串键关联的布尔值。
aCoder.encode(true, forKey: PropertyKey.present)
aCoder.decodeBool(forKey: PropertyKey.present)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |