2017-07-31 80 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. 
    }) 
}) 
相关问题