繁体   English   中英

从两个异步函数接收数据后如何执行操作? Swift

[英]How do I perform an action after receiving data from two asynchronous functions? Swift

我执行 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
     }

您可以将一个动态变量作为 APISuccess,然后在您获得 API 成功时触发该变量,现在您需要做的就是在您的视图 controller 中绑定该变量并编写一个代码 indise 它是块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM