我在 xCode 上苦苦挣扎了几个小时,因为一个非常简单的问题。我正在对 UITableViewController 进行子类化,并在scrollViewDidScroll 方法中,我尝试访问可见的表格 View 行,如下所示:
class ShinySubclass: UITableViewController {
override func scrollViewDidScroll(scrollView: UIScrollView) {
let visibleIndexPaths : [NSIndexPath] = self.tableView.indexPathsForVisibleRows()
...
}
}
虽然我收到了这条可爱的消息,但它指向 self.tableView:
ShinySubclass.swift:58:48: '(UITableView, numberOfRowsInSection: Int) -> Int' does not have a member named 'indexPathsForVisibleRows'
对我来说这似乎是一个 xCode bug。我已经获得了最新版本(版本 6.1 (6A1052d)),并且我已经尝试过清理、重建、打开/关闭房间灯等任何操作...
有什么办法可以解决这个问题吗?
最佳答案
indexPathsForVisibleRows
返回 [AnyObject]?
,但您试图分配给非可选的 [NSIndexPath]
变量。如果您只是让类型推断完成代码编译的工作:
let visibleIndexPaths = self.tableView.indexPathsForVisibleRows()
它返回一个 AnyObject
数组,因此您可能想要向下转换为正确的类型,但在这种情况下需要向下转换:
let visibleIndexPaths = self.tableView.indexPathsForVisibleRows() as? [NSIndexPath]
但是,由于我假设您希望在该数组不是 nil
时进行一些处理,并且考虑到如果没有行可见,indexPathsForVisibleRows
可以返回 nil,您可以使用可选绑定(bind):
if let visibleIndexPaths = self.tableView.indexPathsForVisibleRows() as? [NSIndexPath] {
...
}
在这种情况下,visibleIndexPaths
是一个非可选数组[NSIndexPath]
关于uitableview - self.tableView 不被识别为 UITableView,而是一个随机方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27078555/