关于Swift Api呼叫



我对api调用几乎没有理论上的疑问。我只是想知道,假设一个控制器中有4个api调用,它们相互依赖,那么我应该如何调用它们。对于前

call A() 
call B() 
call C() 
call D()//give A,B,C output to D AS input

另一个疑问是,如果一个控制器中有两个调用彼此没有连接,那么使用串行队列是一个好的做法吗?

对于这种情况,可以使用DispatchGroup

1.创建DispatchGroup的实例

let dispatchGroup = DispatchGroup()

2.创建aOutput, bOutput, cOutput以存储调用A(), B(), C()的方法后收到的api响应。

var aOutput = ""
var bOutput = ""
var cOutput = ""

3.A(), B(), C()内的dispatchGroup上调用enter()leave()方法

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

Swift通常是同步的,这意味着在A((完成执行后,B((将被调用。同样适用于B和C等。

如果你想传递输出,它看起来像这样:

let resultA = A()
let resultB = B()
let resultB = C()
D(resultA, resultB, resultC)

控制器中的这两个调用是做什么的?他们有一些共同点,比如访问相同的资源?

串行队列适合一次执行一个任务,例如,当您不希望两个任务访问同一个文件时,它很有用。

并发任务将允许两个任务同时访问同一文件(这可能会导致问题(

最新更新