无法使用类型的参数列表调用 '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)
}
我尝试使用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)
}