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