首页 > 解决方案 > 从两个异步函数接收数据后如何执行操作?迅速

问题描述

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

标签: iosswift

解决方案


最合适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
     }

推荐阅读