[英]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.