我有一个包含一些字符串的枚举
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将枚举存储为列表。有人知道我该怎么做吗?
答案 0 :(得分:1)
Realm的List
只能存储Object
子类或Realm支持的属性类型之一的元素(例如Int
,String
等)。 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