加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:58:40 所属栏目:百科 来源:网络整理
导读:我想在CoreData中存储被管对象的枚举状态 enum ObjStatus: Int16 { case State1 = 0 case State2 = 1 case State3 = 3}class StateFullManagedObject: NSManagedObject { @NSManaged var state: Int16} 最后一步是将StateFullManagedObject的状态var转换为Ob
我想在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枚举之间的==运算符。我得到的编译时间错误是

Int16 is not convertible to ‘MirrorDisposition’

。参见条件如下:

var obj: StateFullManagedObject = // get the object

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

}

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

您可以使用ObjStatus的.rawValue属性提取原始Int16值。
// 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:
    //...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读