使用枚举作为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