使用枚举作为Realm模型的属性
是否有可能使用一个枚举作为我的模型属性? 我目前有这样的一个类:
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" } .... }
它工作正常,但我希望能够有kind
属性为Enum,并有Realm自动调用.rawValue
属性时,它将存储对象的存储。 这可能在Realm中吗?还是有一个function请求已经在那里?
你应该重写你的kindEnum
的setter和getter这个例子:
enum Kind: String { case CheckedIn case EnRoute case DroppedOff } class Checkin: Object { dynamic var id = 0 dynamic var kind = Kind.CheckedIn.rawValue var kindEnum: Kind { get { return Kind(rawValue: kind)! } set { kind = newValue.rawValue } } }
我进一步完善了这个模型。
enum Thing: String { case Thing1 case Thing2 case Thing3 }
然后在我的Realm类对象中:
class myClass : Object { private dynamic var privateThing = Thing.Thing1.rawValue var thing: Thing { get { return Thing(rawValue: privateThing)! } set { privateThing = newValue.rawValue } } }
这让我们写
myClassInstance.thing = .Thing1
(存储“Thing1”privateThing),但防止打字
myClassInstance.privateThing = "Thing4"
这不是一个有效的值,所以保留了数据的完整性。
由于Realm支持Objective-C枚举,并且它们可以用Int
来表示,所以可以使用这个:
class Checkin: Object { dynamic var id: Int = 0 dynamic var kind: Kind = .checkedIn @objc enum Kind: Int { case checkedIn case enRoute case droppedOff } .... }
如果你需要parsingString
你可以使用Kind
的自定义初始值设定项和toString
函数。
在GitHub中有关于这个的讨论
这适用于Swift 3.0
和Realm 2.0.2