【发布时间】:2017-04-20 06:46:56
【问题描述】:
我正在尝试使我的类符合NSCoding,但遇到了问题,因为它的属性之一是枚举,如下所示:
enum Direction {
case north
case south
}
如果枚举是可编码的,我可以这样做:
class MyClass: NSObject, NSCoding {
var direction: Direction!
required init(coder aDecoder: NSCoder) {
direction = aDecoder.decodeObject(forKey: "direction") as! Direction
}
func encode(with aCoder: NSCoder) {
aCoder.encode(direction, forKey: "direction")
}
}
但枚举不可编码,因此encode() 会引发错误。
“How do I encode enum using NSCoder in swift?”的答案建议对枚举的rawValue 进行编码,然后从另一端的rawValue 对其进行初始化。但在这种情况下,Direction 没有rawValue!
它确实有一个hashValue,看起来很有希望。我可以毫无问题地对其hashValue 进行编码,然后在另一端解码回Int。但是似乎没有办法从它的hashValue 初始化一个枚举,所以我不能把它改回Direction。
如何编码和解码无价值的枚举?
【问题讨论】:
-
因此您无法更改 Enum 以添加原始值。但是你可以对 Enum 进行其他更改吗?
-
@Sweeper 我希望有一种方法可以在不更改枚举的情况下做到这一点。不过我很好奇,有什么变化(除了添加 rawValue)会有所帮助?
-
我在考虑添加一个初始化程序
标签: swift encoding enums swift3 nscoding