我最近使用 Xcode 8.0 将一个项目转换为 Swift 3,但我在一个我不太了解的函数上遇到了错误。在这些方面:
extension HomeTableViewController : UITableViewDelegate {
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
}
}
为了解决这个错误,Xcode 告诉我在方法之前添加 @objc(tableView:commitEditingStyle:forRowAtIndexPath:)
。
好的,它可以工作,但我不明白为什么只有这种方法才需要它。
Xcode 不需要在我的 tableView:heighForHeaderInSection
前面添加 @objc 东西,但我没有看到此方法和 UITableViewDelegate
之间的任何差异tableView:commitEditingStyle:forRowAtIndexPath:
。
那么,知道为什么这对于 tableView:commitEditingStyle:forRowAtIndexPath
方法是强制性的吗?
提前致谢! 😉
最佳答案
您在扩展程序中采用了不正确的协议(protocol)。 tableView:commitEditingStyle:forRowAtIndexPath:
方法是 UITableViewDataSource
协议(protocol)的一部分。更改您的扩展以采用 UITableViewDataSource
协议(protocol)而不是 UITableViewDelegate
协议(protocol),错误消失。
至少当我在 NSCollectionViewDelegate/DataSource
扩展中遇到这个错误时,这对我有用。
关于Swift 3.0 UITableViewDelege Objective-c 方法与要求的选择器不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39510890/