私は私のクラスはNSCoding
に準拠しようとしているが、その特性の一つは、このように、列挙型であるため、問題に実行しているよ:rawValueを持たないenumを(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に他の変更を加えることができますか? – Sweeper
@ Sweeper私はenumを変更することなくそれを行う方法を望んでいました。私は興味がありますが、rawValueを追加する以外にどのような変更が役に立ちますか? – Robert
私はイニシャライザを追加することを考えていました – Sweeper