如何将字典/数组映射到RealmSwift对象

时间:2016-12-17 09:01:02

标签: ios json swift initialization realm

上下文

我们有一些来自[String: Any]的{​​{1}}字典和[[String: Any]]数组,我们希望将其设为Realm Object models的类实例(假设为JSONSerialization.jsonObject()以下示例)。根据Realm文档,我们需要设计具有以下属性的模型:

PersonModel

我们希望制作实例

  • 基于字典创建实例应该是有条件的:即它应该返回class PersonModel : Object { dynamic var id = "" dynamic var name = "" dynamic var imagePath: String? let friends = List<PersonModel>() let movies = List<MovieModel>() } ,因为有时数据无效。
  • 基于数组创建List应仅过滤(或平面映射)有效对象。
  • 字典的键名和类的变量名不匹配:即JSON可能具有“用户名”,但相应的类变量将是“name”。这就是为什么我们无法避免使用字典的手动映射解决方案。

问题

问题

假设我们有这个Realm.create(_:value:update:)字典数组:

[[String:Any]]

期望的结果是:

  • 根本没有创建“u3”PersonModel的实例,因为它的名称无效。
  • 名称为[["userid": "u1", "username": "bob", "image": "http://example.com/bob.jpg", "friendIds": ["u2", "u3"], "movieIds": ["sw4", "sw5", "sw6", "ro"]], ["userid": "u2", "username": "max", "image": "http://example.com/max.jpg", "friendIds": ["u1", "u3"], "movieIds": ["sw4", "sw5", "sw6", "sw7"]], ["userid": "u3", "username": false], ] 且朋友为"bob"的PersonModel实例。
  • 名称为List(max)且朋友为"max"的PersonModel实例。

但对我们来说,我们应该如何通过RealmSwift实现这些条件并不明显。我们没有看到如何编写代码来解决不可错的构造函数List(bob)。我们没有看到第三方JSON映射器(如lyft/mapperJohnSundell/Unbox)如何将给定的非适当Realm.create(_:value:update:)过滤/转换为[[String:Any]]与RealmSwift [[String:Any]]方法兼容。

1 个答案:

答案 0 :(得分:0)

来自Realm的Katsumi。我们建议使用第三方映射库将JSON绑定到Realm模型。我认为ObjectMapper https://github.com/Hearst-DD/ObjectMapper提供了可用的初始化程序来验证映射过程中的JSON结构。这个答案适合你吗?