swift - 关于 Swift Api 调用
问题描述
我对 api 调用几乎没有理论上的怀疑。我只是想知道假设一个控制器中是否有 4 个相互依赖的 api 调用,那么我应该如何调用它们。例如
call A()
call B()
call C()
call D()//give A,B,C output to D AS input
另一个疑问是,如果一个控制器中有 2 个调用彼此没有连接,那么使用串行队列是一个好习惯吗?
解决方案
您可以DispatchGroup
用于这种情况。
1.创建一个实例DispatchGroup
let dispatchGroup = DispatchGroup()
2.创建aOutput, bOutput, cOutput
存储调用方法后收到的api响应A(), B(), C()
。
var aOutput = ""
var bOutput = ""
var cOutput = ""
3.内部调用enter()
和leave()
方法dispatchGroup
A(), B(), C()
func A() {
dispatchGroup.enter()
if let url = URL(string: "") {
URLSession.shared.dataTask(with: url) { (data, response, error) in
aOutput = "A Done"
dispatchGroup.leave()
}
}
}
func B() {
dispatchGroup.enter()
if let url = URL(string: "") {
URLSession.shared.dataTask(with: url) { (data, response, error) in
bOutput = "B Done"
dispatchGroup.leave()
}
}
}
func C() {
dispatchGroup.enter()
if let url = URL(string: "") {
URLSession.shared.dataTask(with: url) { (data, response, error) in
cOutput = "C Done"
dispatchGroup.leave()
}
}
}
func D() {
//use aOutput, bOutput, cOutput here
print(aOutput, bOutput, cOutput)
}
4.添加一个观察者来dispatchGroup
通知当所有 3 个 api 响应都收到时。
dispatchGroup.notify(queue: .main) {
//A, B, C - Done
D()
}
5.A(), B(), C()
现在,从控制器调用方法,
func callApis() {
A()
B()
C()
}
推荐阅读
- heroku - 下一个 Js 的部署构建失败
- laravel - 部署更新的 laravel 应用程序 - 错误:无法安装系统包 - 已解决
- uart - 尽管没有“uart_write_bytes(...)”调用,ESP32C3 在复位后打印到串行
- firebase - 为什么要使用 Firebase 安全规则?
- python - 用于无/空值的 SQLAlchemy 过滤器 - 工作 - 但如何将其放入列表中?
- android - 如何以编程方式保持活动通话?
- azure - 从 Azure DevOps 调用 Azure 自动化 Runbook 作为任务
- javascript - 避免 Chrome 将 .txt 和 .php 文件保存到缓存
- ethereum - Solidity/以太坊合约定义错误
- javascript - 点击 Firebase 数据和 React Native 获取 List 项信息