我尝试使用dispatch_once,但是我遇到了这种错误
var onceToken : dispatch_once_t = 0
dispatch_once(&onceToken, { () -> Void in
self.myCollectionView.scrollToItemAtIndexPath(NSIndexPath.indexAtPosition(1), atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)
})
答案 0 :(得分:3)
首先,您不能以这种方式使用onceToken
。正如我在评论中所写,请阅读this。
Swift编译器错误/警告有时会产生误导。他们正在改进它们,但是......当发生这种错误并且我的代码中没有发现问题时,我会在最后添加简单return
我的闭包(匹配闭包类型签名)。像这样......
dispatch_once(&onceToken, { () -> Void in
self.myCollectionView.scrollToItemAtIndexPath(NSIndexPath.indexAtPosition(1),
atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)
return
})
...这使得编译器更快乐,现在你看到了你真正的问题......
Cannot invoke 'indexAtPosition' with an argument list of type '(Int)'
...那是因为您在indexAtPosition
课程上调用方法NSIndexPath
,这不是类方法。你必须在那里传递NSIndexPath
个对象。
如果您想滚动到第一项,则必须以这种方式调用它:
dispatch_once(&onceToken) {
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.myCollectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .Left, animated: false)
}