2017-07-31 15 views
0

私は就職インタビューによると、2つの異なるAPI呼び出しを取得する方法を知りたいです - 映画名と国際化サポートAPI 2つを一緒に1つのテーブルビューにダウンロードする方法を教えてください。2つの異なるAPIシミュレーションからデータを取得する方法は? swift

が、それは多くの

+0

以下の回答があります。 –

+0

下記の回答を確認してください。 – Jaydeep

答えて

2

私を助ける、事前にあなたに感謝あなたが要求チェーンを作成する必要があり、両方の結果を得た後、あなたが両方のサービスresposnseから辞書の配列を作成する必要がありテーブルビュー

をリロードシンプルです

例えば

は最初だけarrayForMovieNameを返します言う:[ "A"、 "B"、 "C"]

及び第二だけでarrayForLanguageを返します:[ "ヒンディー語"、 "英語"、 "など"]

メイクのWebサービス:

var isLanguageGet:Bool = false 
var isMovieGet:Bool = false 
wsGetMovie() 
{ 
    isMovieGet = true 
    if isLanguageGet 
    { self.tableView.reloadData() 
    } 
} 
wsGetLanguage() 
{ 
    isLanguageGet = true 
    if isMovieGet 
    { self.tableView.reloadData() 
    } 
} 

ソリューションのように、両方のサービスの1テイクブール:

は今

arrForMovieWithLanguage = [[movie:"a","language":["Hindi","English"]],[movie:"b","language":["English"]]] 

ソリューションのような辞書のあなたの作成した3番目の配列には、この2つの配列をマージコールシンク

wsGetMovie() 
{ 
wsGetLanguage() 
} 
wsGetLanguage() 
{ 
self.tableView.reloadData() 
} 
+0

これを行うには、同期呼び出しが最適な方法です。最初のAPI呼び出しを行い、成功した場合はSol2に示すように2番目のAPI呼び出しを行います。これらのAPIのいずれかが失敗した場合は、エラーのアラートを送信するだけです。 – Rishabh

+0

リプレイのおかげで –

0

クロージャを使用して、別のAPI応答を非同期に待つことができます。私はあなたに実装のアイデアを伝えています。その後、あなたの要件に従って実装することができます。

私の要件では、最初のサービスからユーロの価格が必要です。その後、別のAPIでそのユーロ価格が必要となり、支払いデータが返されます。だから、私はこのようなシナリオを以下のように達成します。

func getPaymentDetail(euroPrice: Double, completion: @escaping (Result<JSON>) -> Void) { 
    // Call second API and return result in completion closure. 
    if response.result.isSuccess { 
    completion(response.result) 
    } 
// For failure handle here. 
} 

func getPriceOfEuro(rate: @escaping (Double) -> Void) { 
    // Here I get Euro price. 
} 

次に、これらを以下のように順番にバインドします。

getPriceOfEuro(rate: { (price) in 
    self.getPaymentDetail(euroPrice: price, completion: { (result) in  
      // Take data from result and reload Table. 
    }) 
}) 
関連する問題