2016-02-29 18 views
0

我有一个数组,这是一个简单的:[ [String: AnyObject] ]。这只是一个普通的JSON对象。数组中的所有对象都是相同类型的对象。我的字典里是这样的:如何在Realm中创建来自JSON的同类对象列表

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

我的领域对象的定义如下:

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

我希望把这个JSON,到类型的对象List<Person>

理想,我想要做这样的事情:

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

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

回答

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>

+0

对不起,我指定它需要是一个List。它确实没有。我只是试图避免使它成为一个数组。所以,我只是试图使用更“友好的”类型的容器,而不是常规数组。 –

+0

不用担心。虽然你不应该错过Realm集合类型与stdlib集合之间的一般语义差异:Realm的集合是懒惰的,不会将对象保留在内存中。 – marius

+0

对,这就是为什么我试图避免使用数组。 –

0

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

来填充列表,你将不得不通过arrayOfPersonDictionaries迭代来填充personList,但只有一个数据库保存将被要求