Swift:使用枚举存储CoreData中的状态 [英] Swift: Storing states in CoreData with enums
问题描述
我想在CoreData中存储托管对象的枚举状态
I want to store an enum state for a managed object within CoreData
enum ObjStatus: Int16 {
case State1 = 0
case State2 = 1
case State3 = 3
}
class StateFullManagedObject: NSManagedObject {
@NSManaged var state: Int16
}
最后一步是将stateFullManagedObject的状态var转换为ObjStatus以进行直接比较,为我工作。例如,我不能使用==操作符之间和Int16和Int16枚举。我得到的编译时错误是
The last step would be converting the state var of StateFullManagedObject to ObjStatus for direct comparison, which isn't working for me. For example, I can't use the == operator between and Int16 and the Int16 enum. The compile time error I get is
Int16不能转换为'MirrorDisposition'
Int16 is not convertible to 'MirrorDisposition'
。请参阅下面的条件:
var obj: StateFullManagedObject = // get the object
if (obj.status == ObjStatus.State1) { // Int16 is not convertible to 'MirrorDisposition'
}
如何在Int16和枚举之间比较/分配?
How can I compare/assign between an Int16 and an enum?
推荐答案
code> 的属性
ObjStatus
。
// compare
obj.state == ObjStatus.State1.rawValue
// store
obj.state = ObjStatus.State1.rawValue
但你可能想实现 stateEnum
它的访问器:
But you might want to implement stateEnum
accessor for it:
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:
//...
}
这篇关于Swift:使用枚举存储CoreData中的状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!