RealmSwift与枚举列表

时间:2018-03-02 21:24:54

标签: swift realm

我有一个包含一些字符串的枚举

public enum UserPermission: String, Decodable {
    case userManagement = "USER_MANAGEMENT"
    case contactManagement = "CONTACT_MANAGEMENT"
    case userV2 = "USER_V2.1"
}

@objcMembers final public class MyModel: Object, Decodable {

    public var permissionCollection = List<UserPermission>()

    public dynamic var rawRole: String? = nil

    private enum CodingKeys : String, CodingKey {
        case permissionCollection = "permission_collection"
    }

    convenience public init(permissionCollection: String) {
        self.init()
        self.permissionCollection = permissionCollection
    }

    public required convenience init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        let rawRermissionCollection = try container.decode(String.self, forKey: .permissionCollection)
        self.init(permissionCollection: permissionCollection)
    }

}

我有一个错误Type 'UserPermission' does not conform to protocol 'RealmCollectionValue'

在数据模型中,我需要使用realm将枚举存储为列表。有人知道我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

Realm的List只能存储Object子类或Realm支持的属性类型之一的元素(例如IntString等)。 Realm不支持存储enum值,因此您无法将它们存储在List中。

另一种方法是存储rawValue的{​​{1}},因为enum类型为rawValue,可以存储在Realm中。

答案 1 :(得分:0)

从Realm 3.x开始,您可以使用基于Int的枚举(显然是有副作用的)。

从Realm 4.1开始,您可以通过遵守“ RealmEnum”协议来使用任何RawRepresentable枚举(例如Int,Float,String)。 Details in the pull request