2017-06-22 8 views
1

私はいつもこの(非常単純化された)のように、「データ」キーの後ろにそのデータ・オブジェクトを返すために接続するサーバー:AlamofireObjectMapperでkeyPathの背後にあるオブジェクト配列を取得するには?

{ 
    "data" : [ { "id" : 1, 
       "name" : "howdy" 
       }, 
       { "id" : 2, 
       "name" : "dowdy" 
       } 
      ] 
} 

は、私は、idを持つオブジェクトを(マッピングするためにAlamofireのObjectMapper 4を使用したいです名前)を適切なMappableオブジェクトにコピーします。 しかし、私はどのように 'データ' keyPathの背後に配列を取得するためのサンプルコードや説明を見つけることができません。 jsonのルートレベルの配列の例のロット。

「データ」マッピングを使用してマッピング可能な別のオブジェクトを作成し、そこから配列マッピングをチェーンする必要がありますか?

独自のResponseObjectと入力済みのkeyPathを使用してDataRequestの拡張機能を作成する必要がありますか?

基本的に:ResponseObjectのkeyPathをデフォルトのnilからに設定するにはどうすればいいですか?以下のような何か:

 .responseArray { response(keyPath:"data"): DataResponse<NameModel> in 

これは、それは私がすべてのサンプルを見つけることができないことを私にバッフルようなシンプルかつ共通の問題だ: -/

+0

[Documentation]の[KeyPath]セクション(https://github.com/tristanhimmelman/AlamofireObjectMapper#keypath)はこれを正確に実行していませんか? – paulvs

+0

はい、そうです。私は答えを更新しました。 – axello

答えて

1

答えは、後知恵で、非常に簡単です。誰もそれほど簡単な例を作るのは簡単ではないので、ここに行く:

keyPathはデフォルトの初期化子nilを持つ。独自のキーパスを使用するには、このようresponseArrayにキーパスを追加する必要があります。どのように:

.responseArray(keyPath: "data") { (response: DataResponse<[NameModel]>) in 
     switch response.result { 
      case .success(let items): 
       var names: [NameModel] = [] 
       for name in items { 
        names.append(name) 
       } 
       completion(nil, names) 
       break 
      case .failure(let error): 
       self.handleError(error) 
       completion(ServiceError.jsonError, nil) 
       break 
      } 

私は、これはドキュメントを見続けると考えている他の誰に役立ちます願っていますか?

+0

それは私を助けました、ありがとう – mkul

関連する問題