我有一個網站查詢來獲取更新的“警報”狀態
我有一個帶有 AlertManagerDelegate 協議的 AlertManager,我正在 AlertsTableViewController 中實作這個協議
該協議的功能之一是“didUpdateAlerts”,如下所示,它最終在下拉重繪 后成功查詢后觸發
func didUpdateAlerts(alerts: [String:String]){
DispatchQueue.main.async {
self.serviceDictionary = alerts
self.tableView.reloadData()
}
}
我想在重新加載 tableView 資料后延遲一秒進行 endRefreshing(以獲得更流暢的用戶體驗)
由于查詢資料非常快,如果我在 reloadData() 呼叫下方添加 endRefreshing,重繪 影片幾乎立即結束。我該如何實作延遲?
編輯后的代碼——似乎可以作業但有時列印陳述句列印不止一次,有時延遲仍然比指定的時間短
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")
}
}
uj5u.com熱心網友回復:
您可以使用asyncAfterfunc 將作業項提交到調度佇列,以便在指定時間后異步執行。您可能不需要一整秒,通常 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")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337914.html
