我有一个带有String属性和NSImage属性的' Thing‘对象;Thing类有encodeWithCoder:和decodeWithCoder:方法,我可以使用NSKeyedArchiver/Unarchiver对Thing数组进行存档和解压。
到现在为止还好。现在我想通过一个方向数组来扩展我的Thing类,其中'Direction‘是以下枚举:
enum Direction{
case North(direction:String)
case East(direction:String)
case South(direction:String)
case West(direction:String)
}换句话说,我希望存储的数据是
thing1.directions: Direction = [.North("thing2"), .South("thing3")](在一个更完美的世界里,我会直接引用我的东西,而不仅仅是它们的名字,但我意识到这很容易造成引用循环-在那个东西创建之前不能设置对另一个东西的引用-所以我不会这么做。我正在寻找一种快速而肮脏的方法来保存我的应用程序数据并继续前进。)
因为我需要在其他地方找到方向,所以这是一个单独的实体,而不仅仅是Thing类中的一个枚举。(不确定这是否会有所不同。)
让我的方向枚举符合NSCoding的最好方法是什么?我能想到的最好的变通办法是创建一个字符串:字符串字典以“北”和“南”为键,以"thing2“和"thing3”为值,并从中重建我的枚举属性,但是有没有更好的方法呢?在这个问题上,有没有一种方法可以让元组符合NSCoding,因为现在(String,String)得到了一个‘与协议“AnyObject不兼容’的错误。
非常感谢。
发布于 2014-10-21 01:25:06
我所做的是为枚举提供一个类型并编码和解码它的原始值,或者为枚举实现description并编码和解码该字符串。无论采用哪种方式(或者如果使用其他方式),显然都需要一种在枚举器和可存档类型之间进行双向转换的方法。
发布于 2014-10-21 01:53:00
是的,您需要从原始值访问枚举。完整的示例和讨论如下:
How do I encode enum using NSCoder in swift?
注意Xcode6.1“move code from the old-style”fromRaw()“enum API to the new style-initializer and”rawValue“property”中的更改
https://stackoverflow.com/questions/26471265
复制相似问题