2014-10-07 2 views
2

Следующий код:Swift Closure Compiler Error

var index = 0; 
for (uuid, type) in map! { 
    { (idx) in /*COMPILER ERROR HERE*/ 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { 
      Dashlet.build(self.selectedDashboard!.getUuid(), dashletUuid: uuid, type: type) { (dashlet: Dashlet) in 
       self.dashlets![idx] = dashlet; 

       dispatch_async(dispatch_get_main_queue(), { 
        var path = NSIndexPath(forRow: idx, inSection:0); 
        self.tableView.reloadRowsAtIndexPaths([path], withRowAnimation: UITableViewRowAnimation.Automatic); 
       }); 
      }; 
     }); 
    } (index); 

    index++; 
} 

, но это приводит к ошибке компилятора:

Cannot convert the expression's type 'Int' to Void

мое желание, чтобы назвать dispatch_async столько раз, сколько записей в словарь, и каждый раз с индексом, который больше, чем в последний раз.

EDIT:

Скриншот фактической упрощенной ситуации:

enter image description here

+0

Попробуйте явно установить тип для 'idx'. '{(idx: Int) in' –

+0

@MikeS Спасибо за предложение, но такая же ошибка сохраняется и после этого. – thatidiotguy

+0

Какую версию Xcode вы используете? Я действительно получаю компилятор в Xcode 6.1 GM, когда я пытаюсь скомпилировать аналогичный код без ': Int' на месте. Если я поставлю ': Int', он работает нормально. –

ответ

1

Это, кажется, вызывая ошибку компилятора и/или сбой в Xcode 6.0.1 и Xcode 6.1 GM (хотя это проявляется сами по себе немного по-разному). Способ обойти это состоит в том, чтобы явно определить полный тип закрытия.

Вместо:

{ (idx) in 

было бы:

{ (idx: Int) -> Void in 

Update:

Радиолокационная я подал на этот rdar://18571392 еще в октябре был просто закрыт; ошибка компилятора фиксируется в Swift 1.2/Xcode 6.3 beta 1 (6D520o).

+0

Мне действительно удалось удалить ошибку, назвав функции вместо того, чтобы передавать анонимные функции, в случае, если это помогает кому-то еще. – thatidiotguy

Смежные вопросы