Swift Closure编译器错误

时间:2014-10-07 17:33:04

标签: ios swift closures

以下代码:

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多次,因为字典中有条目,每次索引都比上一次大。

编辑:

实际简化情况的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

这似乎是在Xcode 6.0.1和Xcode 6.1 GM中触发编译器错误和/或崩溃(尽管它在每个中表现得略有不同)。解决它的方法是明确定义完整的闭包类型。

而不是:

{ (idx) in

它将是:

{ (idx: Int) -> Void in

<强>更新

我在10月份提交给rdar://18571392的雷达刚刚关闭;编译器崩溃在Swift 1.2 / Xcode 6.3 beta 1(6D520o)中修复。