首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift枚举和NSCoding

Swift枚举和NSCoding
EN

Stack Overflow用户
提问于 2014-10-21 01:17:15
回答 2查看 3.9K关注 0票数 4

我有一个带有String属性和NSImage属性的' Thing‘对象;Thing类有encodeWithCoder:和decodeWithCoder:方法,我可以使用NSKeyedArchiver/Unarchiver对Thing数组进行存档和解压。

到现在为止还好。现在我想通过一个方向数组来扩展我的Thing类,其中'Direction‘是以下枚举:

代码语言:javascript
复制
enum Direction{

case North(direction:String)
case East(direction:String)
case South(direction:String)
case West(direction:String)

}

换句话说,我希望存储的数据是

代码语言:javascript
复制
thing1.directions: Direction = [.North("thing2"), .South("thing3")]

(在一个更完美的世界里,我会直接引用我的东西,而不仅仅是它们的名字,但我意识到这很容易造成引用循环-在那个东西创建之前不能设置对另一个东西的引用-所以我不会这么做。我正在寻找一种快速而肮脏的方法来保存我的应用程序数据并继续前进。)

因为我需要在其他地方找到方向,所以这是一个单独的实体,而不仅仅是Thing类中的一个枚举。(不确定这是否会有所不同。)

让我的方向枚举符合NSCoding的最好方法是什么?我能想到的最好的变通办法是创建一个字符串:字符串字典以“北”和“南”为键,以"thing2“和"thing3”为值,并从中重建我的枚举属性,但是有没有更好的方法呢?在这个问题上,有没有一种方法可以让元组符合NSCoding,因为现在(String,String)得到了一个‘与协议“AnyObject不兼容’的错误。

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2014-10-21 01:25:06

我所做的是为枚举提供一个类型并编码和解码它的原始值,或者为枚举实现description并编码和解码该字符串。无论采用哪种方式(或者如果使用其他方式),显然都需要一种在枚举器和可存档类型之间进行双向转换的方法。

票数 5
EN

Stack Overflow用户

发布于 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://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26471265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档