【问题标题】:How to create a realm instance (having nested objects) from a dictionary?如何从字典创建领域实例(具有嵌套对象)?
【发布时间】:2017-02-17 10:04:02
【问题描述】:

例如,我有这样的模型class

class User: Objects {
    var firstName: String?
    var lastName: String?
    var friends: List<User>?

}

Dictionary 这样

{
   firstName : "Mohshin"
   lastName : "Shah"
   friends : [
              {
               firstName : "Friend 1"
               lastName : "abc"
               },
              {
               firstName : "Friend 2"
               lastName : "def"
               }
              ]
}

我想使用字典创建一个用户对象。我已经尝试过 Realm 的 init(value: Any) 方法,它只创建具有平面值的用户,但没有启动朋友。

【问题讨论】:

  • 你必须自己添加或者使用空数组
  • 你的意思是说我必须手动操作?
  • 和朋友们 = [User]() 喜欢这样吗?
  • var friends = List&lt;User&gt;() 最好,firstNamelastName 也是如此

标签: ios swift3 realm


【解决方案1】:

您遇到这些问题的原因是List&lt;User&gt; 对象必须在使用前进行初始化。 Realm 建议将 ListRealmOptional 对象声明为 let,因此在模型中初始化它们。

除此之外,您还需要使用dynamic var 属性声明其他属性,以便这些属性成为底层数据库的访问器。

详细了解我在文档的 Property AttributesSupported Types 部分中提到的内容。综上所述,我建议您将模型更改为以下内容:

import RealmSwift

class User: Object {
    dynamic var firstName: String?
    dynamic var lastName: String?
    let friends = List<User>()
}

我希望这会有所帮助,如果您需要更多帮助,请告诉我。

【讨论】:

  • 你是个天才。非常感谢.. :)
【解决方案2】:

试试这样的

func getRealm(dictionary:NSDictionary) {
    let first = dictionary.object(forKey: "first_name")
    let last = dictionary.object(forKey: "first_name")
    var friends = Array<Any>()
    for dict in dictionary.object(forKey: "friends") {
        var user = User()
        user.getRealm(dict)
        friends.append(user)
    }
}

在你的领域模型类中添加这样的方法

【讨论】:

  • 实际上我已经创建了一个用于映射任何实例的通用协议。如果有通用解决方案,那就更好了。我不想具体化课程
  • 你尝试过 Mantle 库吗?它将自动放置字典数组中的属性并返回列表。如果您能分享到目前为止您已实现的内容(即您已实现的通用协议),将会很有帮助
  • 不,我没有使用Mantle
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多