Swift开发-同一个页面多个网络同时进行,然后更新页面的问题

需求描述:

在开发的过程中,一个页面调用了多个网络请求,当所有的网络请求都完成后,刷新tableView,进而更新页面UI。

问题:

如果直接调用多个网络请求后,然后直接在最后一个网络请求里面刷新UI,由于网络请求是异步的,这么操作的话,就会出现刷新了UI后,有的网络请求还没结束。

解决办法:

使用线程组的方式,请求网络!!!

// 创建线程组
var groupQueue:DispatchGroup = DispatchGroup.init()
// 网络请求1
self.groupQueue.enter()
self.request1()
    
// 网络请求2
self.groupQueue.enter()
self.request2()

// 网络请求3
self.groupQueue.enter()
self.request3()
        
// 网络请求都结束后,会收到一个通知
self.groupQueue.notify(queue: DispatchQueue.main) {
    self.tableView.reloadData()
}

问题:线程组收到的通知刷新tableView时,出现页面跳动的问题

解决办法:

在线程组收到通知后,刷新tableView后,要添加一行代码,self.tableView.layoutIfNeeded()如下所示:

// 网络请求都结束后,会收到一个通知
self.groupQueue.notify(queue: DispatchQueue.main) {
    self.tableView.reloadData()
    self.tableView.layoutIfNeeded()
}

你可能感兴趣的:(Swift开发-同一个页面多个网络同时进行,然后更新页面的问题)