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

问题描述:

我最近使用Xcode 8.0将项目转换为Swift 3,并且我在函数上遇到了一个错误,我不太明白。在这些线路上:Swift 3.0 UITableViewDelege Objective-c方法与需求选择器不匹配

extension HomeTableViewController : UITableViewDelegate { 

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

    } 
} 

要解决此错误时,Xcode告诉我,就在方法前加@objc(tableView:commitEditingStyle:forRowAtIndexPath:)

Xcode error

好了,它的工作原理,但我不知道为什么它只是需要这种方法。

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

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

在此先感谢!

+0

我有同样的问题@objc(tableView:heightForRowAtIndexPath :)方法。不知道为什么 – Maiaux

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

至少这对我来说当我得到这个错误NSCollectionViewDelegate/DataSource扩展。

+0

哦,非常感谢,我没有注意到! PEBCAK:/很奇怪,它没有用Swift 2.2发出警告 – Toldy