核心数据 – Swift:使用枚举将状态存储在CoreData中

前端之家收集整理的这篇文章主要介绍了核心数据 – Swift:使用枚举将状态存储在CoreData中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在CoreData中存储被管对象的枚举状态
  1. enum ObjStatus: Int16 {
  2. case State1 = 0
  3. case State2 = 1
  4. case State3 = 3
  5. }
  6.  
  7. class StateFullManagedObject: NSManagedObject {
  8. @NSManaged var state: Int16
  9. }

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

Int16 is not convertible to ‘MirrorDisposition’

。参见条件如下:

  1. var obj: StateFullManagedObject = // get the object
  2.  
  3. if (obj.status == ObjStatus.State1) { // Int16 is not convertible to 'MirrorDisposition'
  4.  
  5. }

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

您可以使用ObjStatus的.rawValue属性提取原始Int16值。
  1. // compare
  2. obj.state == ObjStatus.State1.rawValue
  3.  
  4. // store
  5. obj.state = ObjStatus.State1.rawValue

但是您可能希望实现stateEnum访问器:

  1. class StateFullManagedObject: NSManagedObject {
  2. @NSManaged var state: Int16
  3. var stateEnum:ObjStatus { // ↓ If self.state is invalid.
  4. get { return ObjStatus(rawValue: self.state) ?? .State1 }
  5. set { self.state = newValue.rawValue }
  6. }
  7. }
  8.  
  9. // compare
  10. obj.stateEnum == .State1
  11.  
  12. // store
  13. obj.stateEnum = .State1
  14.  
  15. // switch
  16. switch obj.stateEnum {
  17. case .State1:
  18. //...
  19. case .State2:
  20. //...
  21. case .State3:
  22. //...
  23. }

猜你在找的Swift相关文章