在我的应用程序中,我需要在加载tableview之前获取响应。我需要同时调用大约20个API。每个API数据都需要在tableview中显示每个1个单元格。
我需要在Viewdidload方法中调用它们,该方法在tableview方法之前调用。
任何人都可以指导或提供一些有用的示例吗?
答案 0 :(得分:0)
您应该使用这样的调度组:
let group = DispatchGroup()
group.enter()
networkCall1 {
// response received
group.leave()
}
group.enter()
networkCall2 {
// response received
group.leave()
}
group.notify(queue: DispatchQueue.main, execute: {
// this will be notified only when there is no one left in the group
})
在进行网络通话之前,请输入一个组。当您收到回复时,您将离开该组,当组中没有人时,group.notify
阻止将执行。
这只是一个简单的解释,你应该阅读更多关于它的内容,以完全理解它是如何工作的。
答案 1 :(得分:0)
我的建议是使用GCD的小组。
let backgroundQueue = DispatchQueue.global(attributes: .qosDefault)
let group = DispatchGroup()
var dataForTable:[String] = []
for number in 0..<n {
group.enter()
// Do your request with async callback, append data and leave GCD group.
backgroundQueue.async(group: group, execute: {
let newData = String()
dataForTable.append(newData)
group.leave()
})
}
group.notify(queue: DispatchQueue.main, execute: {
print("All requests data")
self.tableViewData = dataForTable
self.tableView.reloadData()
})