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

我想在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:
    //...
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...