Swift 3.0 UITableViewDelege Objective-c方法与需求的选择器不匹配

Tol*_*ldy 7 swift swift3

我最近使用Xcode 8.0将一个项目转换为Swift 3,我对一个我不太了解的函数出错了.在这些方面:

extension HomeTableViewController : UITableViewDelegate {

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    }
}
Run Code Online (Sandbox Code Playgroud)

为了解决这个错误,Xcode告诉我@objc(tableView:commitEditingStyle:forRowAtIndexPath:)在方法之前添加.

Xcode错误

好的,它有效,但我不明白为什么它只需要这种方法.

Xcode不需要在我面前添加@objc的东西, tableView:heighForHeaderInSection但我没有看到UITableViewDelegate这个方法和之间的 任何差异tableView:commitEditingStyle:forRowAtIndexPath:.

那么,知道为什么这个tableView:commitEditingStyle:forRowAtIndexPath方法是强制性的?

提前致谢!

小智 10

您在扩展程序中采用了错误的协议.该tableView:commitEditingStyle:forRowAtIndexPath:方法是UITableViewDataSource协议的一部分.更改您的扩展名以采用UITableViewDataSource协议而不是UITableViewDelegate协议,错误消失.

当我收到带有NSCollectionViewDelegate/DataSource扩展名的错误时,至少这对我有用.