我想在CoreData中存储托管对象的枚举状态

enum ObjStatus: Int16 {
    case State1 = 0
    case State2 = 1
    case State3 = 3
}

class StateFullManagedObject: NSManagedObject {
    @NSManaged var state: Int16
}

最后一步是将StateFullManagedObject的状态变量转换为ObjStatus以进行直接比较,这对我不起作用。例如,我不能在Int16和Int16枚举之间使用==运算符。我得到的编译时错误是



。请参阅以下条件:
var obj: StateFullManagedObject = // get the object

if (obj.state == ObjStatus.State1) { // Int16 is not convertible to 'MirrorDisposition'

}

我如何在Int16和枚举之间进行比较/分配?

最佳答案

您可以使用Int16.rawValue属性提取原始ObjStatus值。

// compare
obj.state == ObjStatus.State1.rawValue

// store
obj.state = ObjStatus.State1.rawValue

但是您可能要为其实现stateEnum访问器:
class StateFullManagedObject: NSManagedObject {
    @NSManaged var state: Int16
    var stateEnum:ObjStatus {                    //  ↓ If self.state is invalid.
        get { return ObjStatus(rawValue: self.state) ?? .State1 }
        set { self.state = newValue.rawValue }
    }
}

// compare
obj.stateEnum == .State1

// store
obj.stateEnum = .State1

// switch
switch obj.stateEnum {
case .State1:
    //...
case .State2:
    //...
case .State3:
    //...
}

10-08 15:27