我怎样才能让用户每 "n" 秒只刷新一次 table?

How can I allow a user to only refresh a table every "n"th second?

我在我的表格视图中添加了一个 UIRefreshControl,这样我就可以让用户通过拉动来刷新。

他们不需要不断刷新它,只需每 30 秒刷新一次。我怎样才能让他们每 30 秒只执行一次?

@IBOutlet weak var tableView: UITableView!

private let refresher: UIRefreshControl = UIRefreshControl()

override func viewDidLoad() {
    super.viewDidLoad()

    //load Event data
    loadData()

    // Add Refresh Control to Table View
    tableView.refreshControl = refresher

    refresher.addTarget(self, action: #selector(refreshData(_:)), for: .valueChanged)
    refresher.attributedTitle = NSAttributedString(string: "Fetching events...")

}

@objc private func refreshData(_ sender: Any) {
    // Fetch Data
    loadData()
}


private func loadData() {
     //code here for grabbing data
}

很简单;每次用户刷新时,你将日期存储在 属性 中,下一次,如果 30 秒还没有过去,你什么都不做。

不要删除刷新控件,否则会导致糟糕的用户体验

有几种选择,但我认为你可以通过这个实现它

在你的 class

中获取一个全局变量
var start: CFAbsoluteTime = CFAbsoluteTimeGetCurrent()

以及 refreshData 方法检查

let elapsed = CFAbsoluteTimeGetCurrent() - start

如果它比你要求的时间长,你会得到秒然后触发 API 否则就停止刷新控制并重新分配 start = CFAbsoluteTimeGetCurrent()