以下代码:
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多次,因为字典中有条目,每次索引都比上一次大。
编辑:
实际简化情况的屏幕截图:
答案 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)中修复。