Using enum as property of Realm model Using enum as property of Realm model ios ios

Using enum as property of Realm model


You should override your kindEnum's setter and getter for this case:

enum Kind: String {  case CheckedIn  case EnRoute  case DroppedOff}class Checkin: Object {  @objc dynamic var id = 0  var kind = Kind.CheckedIn.rawValue  var kindEnum: Kind {    get {      return Kind(rawValue: kind)!    }    set {      kind = newValue.rawValue    }  }}


I've refined this model a little further.

enum Thing: String {    case Thing1    case Thing2    case Thing3}

then in my Realm class object:

class myClass : Object {    private dynamic var privateThing = Thing.Thing1.rawValue    var thing: Thing {        get { return Thing(rawValue: privateThing)! }        set { privateThing = newValue.rawValue }    }}

This allows us to write

myClassInstance.thing = .Thing1

(storing "Thing1" into privateThing), but prevents typing of

myClassInstance.privateThing = "Thing4"

which is not a valid value so preserving data integrity.


Since Realm support Objective-C enums and they are representable by Int you can use this:

class Checkin: Object {  dynamic var id: Int = 0  dynamic var kind: Kind = .checkedIn  @objc enum Kind: Int {    case checkedIn    case enRoute    case droppedOff  }  ....}

If you need to parse to/from String you can use a custom initializer for Kind and an toString function.

There is a discussion about this in GitHub

This works with Swift 3.0 and Realm 2.0.2