2016-02-29 117 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,但只有一個數據庫保存將被要求