我試圖讓我的類符合NSCoding
,但遇到了問題,因爲它的一個屬性是一個枚舉,像這樣:我如何編碼(與NSCoding)沒有rawValue的枚舉?
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?」的回答建議編碼enum的rawValue
,然後在另一端從rawValue
初始化它。但在這種情況下,Direction
沒有rawValue
!
它確實有hashValue
,這似乎很有前途。我可以毫無問題地編碼它的hashValue
,並在另一端解碼回Int
。但似乎沒有辦法從它的hashValue
初始化枚舉,所以我不能把它變回Direction
。
如何編碼和解碼無價值的枚舉?
所以你不能改變枚舉添加原始值。但是你可以對Enum做其他更改嗎? – Sweeper
@Sweeper我希望能夠在不改變枚舉的情況下做到這一點。我很好奇,但是有什麼變化(除了添加一個rawValue)會有幫助嗎? – Robert
我正在考慮添加一個初始化器 – Sweeper