关于Swift Api调用

关于Swift Api调用,swift,Swift,我对api调用没有多少理论上的疑问。我只是想知道,假设一个控制器中有4个api调用彼此依赖,那么我应该如何调用它们。 前 另一个疑问是,如果一个控制器中有两个调用彼此没有连接,那么使用串行队列是否是一种良好的做法?通常,Swift是同步的,这意味着在执行完后将调用B()。B和C也是如此,以此类推 如果要传递输出,它将如下所示: let resultA=A() 设resultB=B() 设resultB=C() D(结果A、结果B、结果C) 控制器中的这两个调用是做什么的?他们有一些共同点,比如

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


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

通常,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()
}