【发布时间】:2017-07-31 04:37:17
【问题描述】:
我想知道,根据我参加过的一次工作面试,如何获取 2 个不同的 API 调用 - 比如说电影名称和国际语言支持 API 如何将其中 2 个一起下载到一个表格视图中?
提前谢谢你,这对我有很大帮助
【问题讨论】:
-
我在下面给出了答案
-
在下面查看我的答案。
标签: json swift api uitableview
我想知道,根据我参加过的一次工作面试,如何获取 2 个不同的 API 调用 - 比如说电影名称和国际语言支持 API 如何将其中 2 个一起下载到一个表格视图中?
提前谢谢你,这对我有很大帮助
【问题讨论】:
标签: json swift api uitableview
很简单,你必须创建请求链并在获得两个结果后重新加载表格视图
您已经从两个服务响应中创建了字典数组
例如说 first 将只返回 arrayForMovieName:["a","b","c"]
而 Second 将只返回 arrayForLanguage:["Hindi","English","etc"]
现在将这两个数组合并到您创建的第三个字典数组中,例如
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()
}
【讨论】:
您可以使用闭包异步等待另一个 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.
})
})
【讨论】: