2016-10-24 5 views
2

レルムを使用していて、レルムモデルをDictionaryに変換するために使用するextensionがありますが、すべてのレルムモデルを一度に変換する方法はわかりません。私は、すべての領域オブジェクトを一度に1か所に変換する方法を知りたいので、その辞書をAPIに送ることができます。ここで は私のレルムオブジェクトモデルと、私が使用して拡張したもの:すべてのレルムオブジェクトを一度に辞書に変換する

class OrderItemList: Object { 

dynamic var dateCreated = NSDate() 
let orderItems = List<OrderItem>() 
} 

class OrderItem: Object { 

dynamic var name = " " 
dynamic var amount = 0 
dynamic var internalUnique = Int() 
dynamic var isCompleted = false 
} 

は拡張子:

extension Object { 
    func toDictionary() -> NSDictionary { 
     let properties = self.objectSchema.properties.map { $0.name } 
     let dictionary = self.dictionaryWithValuesForKeys(properties) 

     let mutabledic = NSMutableDictionary() 
     mutabledic.setValuesForKeysWithDictionary(dictionary) 

     for prop in self.objectSchema.properties as [Property]! { 
      // find lists 
      if let nestedObject = self[prop.name] as? Object { 
       mutabledic.setValue(nestedObject.toDictionary(), forKey: prop.name) 
      } else if let nestedListObject = self[prop.name] as? ListBase { 
       var objects = [AnyObject]() 
       for index in 0..<nestedListObject._rlmArray.count { 
        let object = nestedListObject._rlmArray[index] as AnyObject 
        objects.append(object.toDictionary()) 
       } 
       mutabledic.setObject(objects, forKey: prop.name) 
      } 

     } 
     return mutabledic 
    } 

} 

答えて

2

残念ながら、辞書にレルムオブジェクトのバッチを変換するための特効薬はありません。必要なオブジェクトを照会し、それぞれのオブジェクトをループしてシリアル化されたバージョンを生成する必要があります。

let realm = try! Realm() 
var objectDictionaries = [NSDictionary]() 

let allObjects = realm.objects(OrderItemList.self) 
for object in allObjects { 
    let dictionary = object.toDictionary() 
    objectDictionaries.append(dictionary) 
} 

あなたの質問にお答えしたいと思います!

関連する問題