iOS(Swift):编码/解码枚举

iOS(Swift):编码/解码枚举,ios,swift,enums,encode,Ios,Swift,Enums,Encode,我有一些NSObject的子类,它定义了一个可表示Enum的字符串,如下所示: class SomeClass: NSObject { enum Direction: String { case north = "North" case south = "South" } public var direction: Direction init(direction: Direction) { self.dire

我有一些
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)
}
但是,当我将
方向的定义更改为

@objc public var direction: Direction
我发现错误属性不能标记为@objc,因为它的类型不能在Objective-C中表示

请问,避免这个错误的最好方法是什么

谢谢你的帮助

编辑

这些评论解释了这个问题。此链接中的答案建议如何使用
字符串
原始表示


您可以利用基于
String
的枚举(不仅仅是)具有的
rawValue
支持:


您可以利用基于
String
的枚举(而不仅仅是)所具有的
rawValue
支持:


尝试用
@objc
@Tj3n标记您的
枚举方向
,谢谢。。。我现在得到以下“@objc”enum原始类型“String”不是整数类型在objc中没有带String的enum,您必须使用Int enum和另一个函数/计算变量将其转换为String尝试用
@objc
@Tj3n标记
枚举方向
,谢谢。。。我现在得到以下“@objc”enum原始类型“String”不是整数类型在objc中没有带String的enum,您必须使用Int enum和另一个函数/计算变量将其转换为String
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)
}