2015-07-29 2 views
0

я стараюсь использовать dispatch_once, но я получил такую ​​ошибкуне может ссылаться на «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) 
    }) 
+2

Пожалуйста * копировать/вставить * ваш реальный код, а не скриншот. –

+0

Прочтите мой [ответ] (http://stackoverflow.com/a/31256136/581190), чтобы узнать, как его использовать. – robertvojta

+0

@robertvojta: 'вар onceToken: dispatch_once_t = 0 dispatch_once (& onceToken), { // self.myCollectionView.scrollToItemAtIndexPath (NSIndexPath.indexAtPosition (1), atScrollPosition: UICollectionViewScrollPosition.Left, анимированные: ложь) }' это ошибка, когда я раскомментирую прокомментированную строку. – vichhai

ответ

3

Прежде всего, вы не можете использовать onceToken в сюда. Как я писал в своем комментарии, прочитайте this.

Быстрые ошибки/предупреждения компилятора иногда вводят в заблуждение. Они улучшают их, но ... Когда возникает такая ошибка, и я не вижу проблемы в своем коде, я собираюсь добавить простой 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) 
} 
Смежные вопросы