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

时间:2015-07-29 08:15:45

标签: ios swift grand-central-dispatch

我尝试使用dispatch_once,但是我遇到了这种错误

'dispatch_once' error

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

1 个答案:

答案 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)
}