在Swift中处理完web查询后延迟endrefresh 2秒



我有一个网站查询更新"警报"状态

我有一个AlertManager与AlertManagerDelegate协议,我在一个AlertsTableViewController实现这个协议

该协议的功能之一是"didUpdateAlerts"如下所示,它最终会在一个成功的查询之后触发

下拉刷新操作
func didUpdateAlerts(alerts: [String:String]){

DispatchQueue.main.async {
self.serviceDictionary = alerts
self.tableView.reloadData()
}
}

我想坚持一个endrefresh与一秒延迟后重新加载tableView数据(为了更流畅的用户体验)

因为查询数据非常快,如果我在reloadData()调用下面添加endRefreshing,刷新动画几乎立即结束。我如何实现延迟?

编辑过的代码——似乎可以工作,但有时print语句打印不止一次,有时延迟仍然短于指定的时间

DispatchQueue.main.async {
self.serviceDictionary = alerts
self.tableView.reloadData()
//self.perform(#selector(self.stopRefreshing), with: nil, afterDelay: 5)
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
self.refreshAlertsControl.endRefreshing()
print("After 3 sec delay - alertRefresh")
}
}

您可以使用asyncAfter函数将工作项提交到调度队列中,以便在指定时间后异步执行。您可能不需要整整一秒钟,通常0.3秒就足够了,但示例显示了5秒的执行延迟。

DispatchQueue.main.async {
self.tableView.reloadData()
print("Before delay")
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
self.refreshControl.endRefreshing()
print("After 5 sec delay")
}
}

最新更新