如何使用Swift在iOS中同时调用20个webservices?

时间:2016-12-15 09:10:17

标签: ios swift uitableview

在我的应用程序中,我需要在加载tableview之前获取响应。我需要同时调用大约20个API。每个API数据都需要在tableview中显示每个1个单元格。

我需要在Viewdidload方法中调用它们,该方法在tableview方法之前调用。

任何人都可以指导或提供一些有用的示例吗?

2 个答案:

答案 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()
})