Is it possible to use an Enum as a property for my model? I currently have a class like this:
class Checkin: RLMObject { dynamic var id: Int = 0 dynamic var kind: String = "checked_in" var kindEnum: Kind = .CheckedIn { willSet { self.kind = newValue.rawValue } } enum Kind: String { case CheckedIn = "checked_in" case EnRoute = "en_route" case DroppedOff = "dropped_off" } .... }
It works okay, but I'd like to be able to have the kind
property be the Enum and have Realm automatically call .rawValue
on the property when it is saving an object to the store. Is this possible in Realm or is there a feature request already out there for it?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With