Я новичок в Swift (фон в C ++) и пытаюсь сделать очень простую вещь: сохранить Bool.Это прекрасно работает, если я преобразую bool в строку, которая является либо «A», либо «B», а затем преобразую обратно, но если я сохраню bool напрямую с помощью encode и aDecoder, Bool каждый раз возвращается ноль.Ничего не могу найти в интернете.
Как вы можете видеть ниже, я просто подставляю строку для 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")
}
Не нужно сохранять Bools?Это кажется не элегантным.