1
votes

I'm trying to create a UITablView extension function to reload table after some time delay, like:

extension UITableView {
    func reloadData(afterDelay delayTime: TimeInterval) -> Void {
        self.perform(#selector(self.reloadData), with: nil, afterDelay: delayTime)
    }
}

But it's showing me an error: Ambiguous use of 'reloadData'

What's its proper solution?

Here is snapshot with error message enter image description here

4
Change your method name to something else like reloadDataWithDelay and checkSivajee Battina
If the purpose of the delay is to wait for some asynchronous task don't do that.vadian
@vadian, you are absolutely right, and I need this function for same purpose. I've some animation operations, that needs tableview to wait for few time interval, to reload its data.Krunal

4 Answers

4
votes

Rename your function because it conflicts with UITableView's reloadData()

//---------
extension UITableView {

    // Default delay time = 0.5 seconds
    // Pass delay time interval, as a parameter argument
    func reloadDataAfterDelay(delayTime: TimeInterval = 0.5) -> Void {
        self.perform(#selector(self.reloadData), with: nil, afterDelay: delayTime)
    }

}
2
votes

I would approach this using a block, like so:

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delayTime) { [weak self] in
    self?.tableView.reloadData()
}
1
votes
  extension UITableView {
    func reloadDataAfterDelay(delayTime: TimeInterval) -> Void {
    let when = DispatchTime.now() + delayTime
       DispatchQueue.main.asyncAfter(deadline: when) {
           self.reloadData()
       }
    }
  }
1
votes

Try this:

extension UITableView {
    func reloadDataWithDelay(delayTime: TimeInterval) -> Void {
        let delayTime = DispatchTime.now() + 2
        DispatchQueue.main.asyncAfter(deadline: delayTime) {
             self.reloadData()
        }

    }
}