2017-07-31 36 views
0

我想知道,根據我的工作面試,如何獲取2個不同的API調用 - 讓說電影名稱和國際語言支持API 如何將它們中的2個一起下載到一個表視圖中?如何從兩個不同的API仿真獲取數據? swift

預先感謝您它會幫助我很多

+0

我在下面給出了答案 –

+0

請在下面檢查我的答案。 – Jaydeep

回答

2

這是簡單,你必須創建請求鏈,並獲得兩個結果後重新裝載的tableview

你必須從兩個服務resposnse

創建字典的數組

例如先說將僅返回arrayForMovieName: 「A」, 「b」, 「C」]

和第二次返回剛剛arrayForLanguage: 「印地文」, 「英語」, 「等」]

現在合併這兩陣列到字典中您所創建的第三排像

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

解決方法:1取布爾爲服務像

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

解決方案:2進行Web服務呼叫同步

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

同步呼叫將是這樣做的最佳方法。進行第一次API調用並取得成功後,進行第二次API調用,如Sol2所示。如果這些API中的任何一個失敗,則只需提供錯誤警報。 – Rishabh

+0

感謝您的重播 –

0

您可以使用closure來異步等待另一個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. 
    }) 
}) 
相關問題