Swift: Storing states in CoreData with enums

后端 未结 2 1787
灰色年华
灰色年华 2020-11-30 23:36

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
}

cla         


        
2条回答
  •  青春惊慌失措
    2020-12-01 00:08

    You can extract raw Int16 value with .rawValue property of ObjStatus.

    // compare
    obj.state == ObjStatus.State1.rawValue
    
    // store
    obj.state = ObjStatus.State1.rawValue
    

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

提交回复
热议问题