【问题标题】:RealmSwift with enum list带有枚举列表的 RealmSwift
【发布时间】:2018-03-02 21:24:53
【问题描述】:

我有一个带有一些字符串大小写的枚举

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'

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

【问题讨论】:

    标签: swift realm


    【解决方案1】:

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

    另一种方法是存储enumrawValue,因为它具有String 类型的rawValue,可以存储在Realm 中。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2020-04-19
      相关资源
      最近更新 更多