无法使用类型的参数列表调用 'dispatch_once'

Cannot invoke 'dispatch_once' with an argument list of type

我尝试使用dispatch_once,但出现了这种错误

var onceToken : dispatch_once_t = 0
    dispatch_once(&onceToken, { () -> Void in
        self.myCollectionView.scrollToItemAtIndexPath(NSIndexPath.indexAtPosition(1), atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)
    })

首先,你不能这样使用onceToken。正如我在评论中所写,阅读 this.

Swift 编译器 errors/warnings 有时会产生误导。他们正在改进它们,但是......当这种错误发生并且我没有在我的代码中看到问题时,我将在我的闭包末尾添加简单的 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)'

... 那是因为您在 NSIndexPath class 上调用方法 indexAtPosition,它不是 class 方法。你必须在那里传递 NSIndexPath 对象。

如果你想滚动到第一项,你必须这样调用它:

dispatch_once(&onceToken) {
  let indexPath = NSIndexPath(forRow: 0, inSection: 0)
  self.myCollectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .Left, animated: false)
}