2014-11-22 60 views
0

我在一个非常简单的问题上苦苦挣扎了数小时。我子类的UITableViewController,并在scrollViewDidScroll的方法,我想访问我看到的tableview行,因为这样的:self.tableView不被识别为UITableView,而是一个随机方法

class ShinySubclass: UITableViewController { 
    override func scrollViewDidScroll(scrollView: UIScrollView) { 
     let visibleIndexPaths : [NSIndexPath] = self.tableView.indexPathsForVisibleRows() 
     ... 
    } 
} 

虽然我得到这个可爱的消息,指着自己。 ableView:

ShinySubclass.swift:58:48: '(的UITableView,numberOfRowsInSection:智力) - > INT' 不具有名为构件 'indexPathsForVisibleRows'

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

任何想法如何解决它?

回答

1

indexPathsForVisibleRows返回[AnyObject]?,但您试图将其分配给非可选[NSIndexPath]变量。如果你让类型推断做的工作代码编译:

let visibleIndexPaths = self.tableView.indexPathsForVisibleRows() 

返回的AnyObject数组,因此可能要向下转换到正确的类型,但在这种情况下,需要向下转换:

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

但是,因为我相信你想要做一些处理,如果该数组不nil,并考虑到indexPathsForVisibleRows可以返回零,如果没有行是可见的,你可以使用可选的结合:

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

在这种情况下visibleIndexPaths是一个非可选数组[NSIndexPath]

+0

这工作! xCode真的需要改进它的错误信息...我无法做出我犯的错误和我得到的错误信息之间的联系。 – Mabedan 2014-11-22 14:48:48

+0

是的,这是swift编译器的常见问题。我认为这可以通过类型推断试图找到返回'[NSIndexPath]'的方法来解释,这当然不存在。 – Antonio 2014-11-22 15:14:36

+0

可能会更糟。一些应该产生错误并拒绝构建的东西会尝试编译并打到段错误(编译器段错误)。 – nhgrif 2014-11-22 15:42:28