[英]iOS (Swift): Encoding/Decoding Enums
我有一些NSObject
子类,在下面定义了一个可表示字符串的Enum
:
class SomeClass: NSObject {
enum Direction: String {
case north = "North"
case south = "South"
}
public var direction: Direction
init(direction: Direction) {
self.direction = direction
super.init()
}
}
我想允许对此类进行编码和解码,因此我使用以下方法:
func encode(with aCoder: NSCoder) {
aCoder.encode(direction, forKey: #keyPath(direction))
}
public convenience required init?(coder aDecoder: NSCoder) {
self.init(direction: aDecoder.decodeObject(forKey: #keyPath(direction)) as! Direction)
}
但是,出现以下错误“ #keyPath”的参数是指非“ @objc”属性的“ direction”,并且当我将direction
的定义更改为
@objc public var direction: Direction
我收到以下错误消息: Property不能标记为@objc,因为它的类型不能在Objective-C中表示 。
请避免这种错误的最佳方法是什么?
谢谢你的帮助。
编辑
注释说明了问题。 此链接中的此答案建议如何完成使用String
Raw可表示的对象。
您可以利用基于String
的枚举(不仅是)具有的rawValue
支持:
func encode(with aCoder: NSCoder) {
aCoder.encode(direction.rawValue, forKey: "direction")
}
public convenience required init?(coder aDecoder: NSCoder) {
guard let direction = Direction(rawValue: aDecoder.decodeObject(forKey: "direction") else {
// direction was not encoded, we assume an encoding error
return nil
}
self.init(direction: direction)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.