为什么我收到错误消息“类型 'PublicTableViewController' 没有成员 'handleRefresh'”

Why am I getting the error 'Type 'PublicTableViewController' has no member 'handleRefresh''

我正在尝试在 swift 中为我的 UITableViewController 实现拉动重新加载,这是我的代码:

class PublicTableViewController: UITableViewController{
    override func viewDidLoad(){
        super.viewDidLoad()
        ...

        self.refreshControl?.addTarget(self, action: #selector(PublicTableViewController.handleRefresh(_:)), for: UIControl.Event.valueChanged)
    }

    func handleRefresh(refreshControl: UIRefreshControl) {
        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }
    ...
}

但是当我构建这个时,我得到了类型 'PublicTableViewController' 没有成员 'handleRefresh'' 的错误,我不明白为什么。

这样改

class PublicTableViewController: UITableViewController{
    override func viewDidLoad(){
        super.viewDidLoad()
        ...

        self.refreshControl?.addTarget(self, action: #selector(self.handleRefresh()), for: UIControl.Event.valueChanged)
    }

   @objc func handleRefresh() {
        self.tableView.reloadData()
    }
}

您必须将@objc 添加到方法中以采用#selector。

选择器中指定的函数签名与您的实际函数不一样。

或者,将您的函数更改为:

@objc func handleRefresh(_ refreshControl: UIRefreshControl) {
    self.tableView.reloadData()
}

并保持您的选择器不变。

或者将您的选择器更改为:

self.refreshControl?.addTarget(self, action: #selector(PublicTableViewController.handleRefresh(refreshControl:)), for: .valueChanged)

并保持您的功能不变。

提示:当您编写选择器并点击 PublicTableViewController 之后的点时,Xcode 将自动建议正确的函数签名;)