@objc protocol Refreshable { /// The refresh control var refreshControl: UIRefreshControl? { get set } /// The table view var tableView: UITableView! { get set } /// the function to call when the user pulls down to refresh @objc func handleRefresh(_ sender: Any); } extension Refreshable where Self: UIViewController { /// Install the refresh control on the table view func installRefreshControl() { let refreshControl = UIRefreshControl() refreshControl.tintColor = .primaryColor refreshControl.addTarget(self, action: #selector(handleRefresh(_:)), for: .valueChanged) self.refreshControl = refreshControl if #available(iOS 10.0, *) { tableView.refreshControl = refreshControl } else { tableView.backgroundView = refreshControl } } }