关于Swift Api调用
我对api调用没有多少理论上的疑问。我只是想知道,假设一个控制器中有4个api调用彼此依赖,那么我应该如何调用它们。 前关于Swift Api调用,swift,Swift,我对api调用没有多少理论上的疑问。我只是想知道,假设一个控制器中有4个api调用彼此依赖,那么我应该如何调用它们。 前 另一个疑问是,如果一个控制器中有两个调用彼此没有连接,那么使用串行队列是否是一种良好的做法?通常,Swift是同步的,这意味着在执行完后将调用B()。B和C也是如此,以此类推 如果要传递输出,它将如下所示: let resultA=A() 设resultB=B() 设resultB=C() D(结果A、结果B、结果C) 控制器中的这两个调用是做什么的?他们有一些共同点,比如
另一个疑问是,如果一个控制器中有两个调用彼此没有连接,那么使用串行队列是否是一种良好的做法?通常,Swift是同步的,这意味着在执行完后将调用B()。B和C也是如此,以此类推 如果要传递输出,它将如下所示:
let resultA=A()
设resultB=B()
设resultB=C()
D(结果A、结果B、结果C)
控制器中的这两个调用是做什么的?他们有一些共同点,比如访问同一个资源
串行队列适用于一次执行一个任务,例如,当您不希望两个任务访问同一个文件时非常有用
一个并发任务将允许两个任务同时访问同一个文件(这可能会导致问题)对于这种情况,您可以使用
DispatchGroup
1.创建DispatchGroup
let dispatchGroup = DispatchGroup()
2.创建aooutput、bOutput、cOutput
以存储调用A()、B()、C()方法后收到的api响应
3.调用A()、B()、C()内部dispatchGroup
上的enter()
和leave()
方法
4.在dispatchGroup
中添加一名观察员,以便在收到所有3个api响应时发出通知
dispatchGroup.notify(queue: .main) {
//A, B, C - Done
D()
}
5。现在,从控制器调用方法A(),B(),C()
func callApis() {
A()
B()
C()
}
谢谢你的回答。另外两个电话没有任何共同之处。另一件事是,如果你有4个以上的电话,而这些电话彼此之间没有任何关系,我应该如何同时呼叫呢?。为了使我的ui在一段时间内不会冻结,您可以这样使用:让concurrentQueue=DispatchQueue(标签:“concurrent.queue”,属性:。concurrent);concurrentQueue.async{callA()};concurrentQueue.async{callB()};concurrentQueue.async{callC()};concurrentQueue.async{callD()}(请原谅格式的缺失,我在手机上,稍后将进行编辑)
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)
}
dispatchGroup.notify(queue: .main) {
//A, B, C - Done
D()
}
func callApis() {
A()
B()
C()
}