self.tableView未被识别为UITableView,而是随机方法

self.tableView未被识别为UITableView,而是随机方法,uitableview,swift,Uitableview,Swift,为了一个非常简单的问题,我在xCode上挣扎了几个小时。我正在对UITableViewController进行子类化,在scrollViewDidScroll方法中,我尝试访问我的可见tableview行,如下所示: class ShinySubclass: UITableViewController { override func scrollViewDidScroll(scrollView: UIScrollView) { let visibleIndexPaths

为了一个非常简单的问题,我在xCode上挣扎了几个小时。我正在对UITableViewController进行子类化,在scrollViewDidScroll方法中,我尝试访问我的可见tableview行,如下所示:

class ShinySubclass: UITableViewController {
    override func scrollViewDidScroll(scrollView: UIScrollView) {
        let visibleIndexPaths : [NSIndexPath] = self.tableView.indexPathsForVisibleRows()
        ...
    }
}
虽然我收到了这条可爱的消息,但指向self.tableView:

ShinySubclass.swift:58:48:'(UITableView,第节中的行数:Int) ->Int'没有名为'indexPathsForVisibleRows'的成员

对我来说,这似乎是一个xCode错误。我已经有了最新的版本(6.1版(6A1052d)),我尝试过任何东西,从清洁、重建、打开/关闭房间灯等等


有什么办法吗?

indexPathsForVisibleRows
返回
[AnyObject]?
,但您试图分配给一个非可选的
[nsindepath]
变量。如果您只是让类型推断完成工作,代码将编译:

let visibleIndexPaths  = self.tableView.indexPathsForVisibleRows()
它返回一个
AnyObject
数组,因此您可能希望向下转换为正确的类型,但在这种情况下需要向下转换:

let visibleIndexPaths = self.tableView.indexPathsForVisibleRows() as? [NSIndexPath]
但是,由于我假设如果该数组不是
nil
,您希望进行一些处理,并且考虑到
indexPathsForVisibleRows
可以在没有可见行的情况下返回nil,因此可以使用可选绑定:

if let visibleIndexPaths = self.tableView.indexPathsForVisibleRows() as? [NSIndexPath] {
    ...   
}

在本例中,
visibleIndexPaths
是一个非可选数组
[NSIndexPath]

,它可以工作!xCode确实需要改进它的swift错误消息。。。我不能把我犯的错误和我收到的错误信息联系起来。是的,这是swift编译器的一个常见问题。我认为这可以解释为类型推断试图找到一个返回
[nsindepath]
的方法,这个方法当然不存在。可能更糟。有些应该生成错误并拒绝构建的东西会尝试编译并命中segfault(编译器segfaults)。