如何在Realm中从JSON创建同类对象列表

时间:2016-02-29 19:28:36

标签: ios swift realm

我有一个数组,这很简单:[ [String: AnyObject] ]。这只是一个常规的JSON对象。数组中的所有对象都是相同类型的对象。我的字典看起来像这样:

[ { "firstName" : "Joe", "lastName": "Smith"}, {"firstName": "John", "lastName" : "Jones"} ]

My Realm对象的定义如下:

public class Person : Object { public dynamic var firstName = "" public dynamic var lastName = "" }

我想将此JSON转换为List<Person>

类型的对象

理想情况下,我想做这样的事情:

let personList: List<Person> = unknown(arrayOfPersonDictionaries)

我意识到我可以构建一个循环来遍历arrayOfPersonDictionaries中的每个对象,并在每个对象上创建一个Realm对象。我只是想知道是否有更方便的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

您描述了希望List<Person>作为返回类型。此类型用于管理Realm Swift中的关系。 所以如果你有另一个对象类,例如House residents与关系class House : Object { let residents = List<Person>() } try! realm.write { let people = [ { "firstName" : "Joe", "lastName": "Smith"}, {"firstName": "John", "lastName" : "Jones"} ] let house = realm.create(House.self, value: [ "residents": people ]) } ,您只需创建一个对象,其中包含与您相关的词典数组中的所有人员,其中包含以下内容:

try! realm.write {
   let arrayOfPersonDictionaries = [ { "firstName" : "Joe", "lastName": "Smith"}, {"firstName": "John", "lastName" : "Jones"} ]
   let people = arrayOfPersonDictionaries.map { realm.create(Person.self, value: $0) }
}

如果您只想为持久对象列表获取合适的集合,可以通过类似的方式实现:

Array<Person>

这将返回class A { string name; int age; string gender; //assuming all the constructors, getters and setters are present }

答案 1 :(得分:0)

如果您创建了一个包含List<Person>的类,那么您只需要存储一个包含完整列表的Realm对象。

要填充列表,您必须遍历arrayOfPersonDictionaries以填充personList,但只需要一次数据库保存