gpt4 book ai didi

Swift 枚举和 NSCoding

转载 作者:搜寻专家 更新时间:2023-10-31 08:21:28 25 4
gpt4 key购买 nike

我有一个带有 String 属性和 NSImage 属性的“Thing”对象; Thing 类有 encodeWithCoder: 和 decodeWithCoder: 方法,我可以使用 NSKeyedArchiver/Unarchiver 归档和取消归档 [Thing] 数组。

到目前为止,还不错。现在我想通过方向数组扩展我的 Thing 类,其中“方向”是以下枚举:

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 类中的一个枚举。 (不确定这是否有所作为。)

使我的 Direction 枚举符合 NSCoding 的最佳方法是什么?我能想到的最好的解决方法是创建一个 [String: String] 字典,其中“North”和“South”作为键,“thing2”和“thing3”作为值,并从中重建我的枚举属性,但是有没有更好的方法?就此而言,有没有办法让元组符合 NSCoding,因为现在 (String, String) 给我一个“与协议(protocol)“AnyObject”不兼容”的错误。

非常感谢。

最佳答案

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

关于Swift 枚举和 NSCoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com