Swift 3 UITableView数据源方法viewForHeaderInSection发出警告

时间:2016-09-26 17:14:54

标签: swift uitableview swift3 ios10 xcode8

迁移到Swift 3后,我有以下方法:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {}

它给了我警告

  

实例方法'tableView(tableView:viewForHeaderInSection :)'差不多了   匹配可选要求'tableView(_:titleForHeaderInSection :)'   协议'UITableViewDataSource'

Fix-it提供将方法设为私有或添加@“nonobjc”注释。如何解决警告?

1 个答案:

答案 0 :(得分:26)

我的应用程序中都有类似的警告。实际上有2个问题。我通过在方法签名中添加下划线或将方法移动到实现方法来源的协议的右扩展来修复所有警告。

我认为你的问题可能是两者的结合。

更详细:

1)您可能忘记添加"下划线" " tableView之前的字符:...",这使得它在Swift 3中成为一种不同的方法(在Swift 2.3中它并不重要)。所以你应该改变这个:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

到此:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

2)方法tableView(_:viewForHeaderInSection:)来自UITableViewDelegate协议,但看起来编译器并不知道这个方法 - 它只知道来自UITableViewDataSource的方法和试图告诉你其中一个(tableView(_:titleForHeaderInSection:))。所以你要么根本不实现UITableViewDelegate,要么就是这样做,但在另一个扩展中可能呢?