【问题标题】:CodingKeys not working in mongodb realm syncCodingKeys 在 mongodb 领域同步中不起作用
【发布时间】:2020-06-26 13:33:58
【问题描述】:

如何在 Swift 中为我的模型类覆盖 Mongo 属性。因为我使用的标准与云中的命名法不同。例如:(在 swift 中:分​​区,在云中:_partition)。

预期结果

我希望我不必在 Swift 中使用与服务器上相同的命名法来编写我的类。

代码示例

class Project: Object, Codable {
    
    @objc dynamic var id = ObjectId.generate()
    @objc dynamic var partition = ""
    @objc dynamic var name = ""
    
    enum CodingKeys: String, CodingKey {
        case id = "_id"
        case partition = "_partition"
        case name
    }
    
    override static func primaryKey() -> String? {
        return "id"
    }
    
    convenience init(partition: String, name: String) {
        self.init()
        self.partition = partition
        self.name = name
    }
}

领域和工具的版本

Realm 框架版本:pod 'RealmSwift', '=10.0.0-beta.2'

领域对象服务器版本:4.4.0-rc9

Xcode 版本:11.5 (11E608c)

iOS/OSX 版本:13.5

【问题讨论】:

    标签: ios swift mongodb realm


    【解决方案1】:

    我相信您的 Realm 对象属性需要与 Mongo 中的相匹配。

    因此,如果您通过 Mongo Web 控制台将属性命名为 _partition,则您的对象将需要具有匹配的属性 _partition

    至少到目前为止,这是我们的经验。我们的对象键是_partitionKey,所以我们的领域对象必须匹配

    class TaskClass: Object {
        @objc dynamic var _id: ObjectId = ObjectId.generate()
        @objc dynamic var _partitionKey = ""
    

    这里是 MongoDB 控制台中的位置。

    【讨论】:

    • 在Kotlin/Java中可以放置注解@RealmField("name_Field"),类似于Gson库的@SerializedName("name_Field")。但是在 Swift 中我无法解决这个问题,即使使用 Codable 类。
    • @LeonardoFigueiredo 我不认为这是一个真正的问题 - 就是这样。如果您想使用“分区”一词作为对象 mongo 分区键,为什么不在 MongoDB 控制台中也定义它呢?该分区键实际上是供 mongo 组织对象的,只要它在控制台和对象中都相同,就可以了。
    • 我们已经在 Mongo 和手机领域运行了一个大型项目。在使用我用来正常制作 CodingKeys 的针迹之前,我正在寻找一种替代方法,这样我就不必重命名所有类的所有属性。
    • _partition 只是一个例子,服务器上的字段符号如下:free_access,date_published等。在应用程序中都映射为另一种格式:freeAccess,datePublished ...
    • @LeonardoFigueiredo 啊。我懂了。根据我们所见,控制台中定义的任何分区键都必须与 Realm 对象的属性相匹配。我不认为有办法解决这个问题。但是,我想知道您是否可以添加一个 _partition 属性来满足该要求,并有一个非托管的 property 作为它的前面,这样您仍然可以使用编码。最初需要迁移才能分配_partition。只是在这里大声思考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多