我想在CoreData中存储托管对象的枚举状态
enum ObjStatus: Int16 { case State1 = 0 case State2 = 1 case State3 = 3 } class StateFullManagedObject: NSManagedObject { @NSManaged var state: Int16 }
最后一步是将StateFullManagedObject的状态变量转换为ObjStatus以进行直接比较,这对我不起作用。例如,我不能在Int16和Int16枚举之间使用==运算符。我得到的编译时错误是
Int16不能转换为’MirrorDisposition’
。请参阅以下条件:
var obj: StateFullManagedObject = // get the object if (obj.state == ObjStatus.State1) { // Int16 is not convertible to 'MirrorDisposition' }
如何在Int16和枚举之间进行比较/分配?
您可以Int16使用.rawValue属性提取原始值ObjStatus。
Int16
.rawValue
ObjStatus
// compare obj.state == ObjStatus.State1.rawValue // store obj.state = ObjStatus.State1.rawValue
但是您可能想要为其实现stateEnum访问器:
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: //... }