ios - 从两个异步函数接收数据后如何执行操作?迅速
问题描述
我执行 2 个 http 请求并从它们异步获取数据。接收到数据后,我需要根据它组成一个数组并重新加载表,我该怎么做呢?代码:
override func viewDidLoad() {
super.viewDidLoad()
ApiManager.shared.getStocks(completion: {result in
DispatchQueue.main.async {
switch result {
case .success(let stocks):
self.stocks = stocks
case .failure:
self.stocks = []
}
print(self.stocks.count)
}
})
ApiManager.shared.getDowJones (completion: { result in
DispatchQueue.main.async {
switch result {
case .success(let dowJones):
self.dowJones = dowJones
case .failure:
self.dowJones = []
}
print(self.dowJones.prefix(10))
}
})
}
解决方案
最合适DispatchGroup
let g = DispatchGroup()
g.enter()
ApiManager.shared.getStocks(completion: {result in
DispatchQueue.main.async {
switch result {
case .success(let stocks):
self.stocks = stocks
case .failure:
self.stocks = []
}
g.leave()
print(self.stocks.count)
}
})
g.enter()
ApiManager.shared.getDowJones (completion: { result in
DispatchQueue.main.async {
switch result {
case .success(let dowJones):
self.dowJones = dowJones
case .failure:
self.dowJones = []
}
g.leave()
print(self.dowJones.prefix(10))
}
})
g.notify(queue:.main) {
// reload here
}
推荐阅读
- android - Android Studio 卡在安装 APK,adb 有时无法安装 APK,不知为何 Android Studio 干扰了 adb 的 install 命令
- javascript - 单击 ID 不可用的按钮
- javascript - javascript 导入、导出:简单示例失败
- java - 如何使比较器正常工作,现在它给出了错误的字符串长度
- rust - 如何获取对 RwLock 内对象的引用?
- kotlin - Webflux,基于 Reactive Publisher 的流程在中间被打断
- r - 对数据框的每一行应用 agrep 函数
- css - “数字”类型的输入字段未在 Wordpress 的联系表 7 中显示任何文本
- matlab - 如何针对另一个不同大小的日期时间列表对日期时间列表进行逻辑测试?MATLAB
- javascript - 如何在返回结果中创建新字段并根据使用 Mongoose 的条件在其中设置值?