方法不会覆盖其超类中的任何方法:Swift / UITableViewController / MapKit

时间:2018-06-12 22:00:23

标签: ios swift

我正在创建一个带有自动填充搜索栏的mapView,我收到Method Does Not Override Any Method From Its Superclass错误。以下是我发生此错误的代码示例:

extension LocationSearchTable {
override func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int {
    return matchingItems.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath 
indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
    let selectedItem = matchingItems[indexPath.row].placemark
    cell.textLabel?.text = selectedItem.name
    cell.detailTextLabel?.text = ""
    return cell
}
}

这是创建错误的函数:

override func tableView(tableView: UITableView, cellForRowAtIndexPath 
indexPath: NSIndexPath) -> UITableViewCell { 

我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:1)

您可能需要澄清一些事情。

我假设:

  • 您的LocationSearchTableUITableViewController的子类。

  • 您使用Xcode 8 / Swift 3或更高版本。

  • 您不会收到错误或警告: override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

你应该更好地展示你的代码显示错误的位置,它似乎非常非常老。

更好地了解UITableViewDataSource的方法在最新的Swift中是什么样的,你知道UITableViewController符合:

UITableViewDataSource

  

...

     

func tableView(UITableView, cellForRowAt: IndexPath) -> UITableViewCell

     

...

在最近的Swifts中,导入的方法名称更加 swiftified ,使用旧的代码片段时应该小心。

尝试将方法标题更改为:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

请不要忘记第一个参数的空标签_,第二个参数标签是cellForRowAt,而不是cellForRowAtIndexPath,其类型为IndexPath,不是NSIndexPath

另外,如果您删除override,则可能会收到错误。

答案 1 :(得分:0)

如果要将tableView添加到视图中,则应将tableview的委托和数据源设置为对象,并根据需要实现数据源和委托的方法。