我希望在处理完最后一项后执行额外的逻辑,但终端显示i
始终与c
具有相同的值。知道如何传递循环变量?
let c = a.count
for var i=0; i<c; i++ {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
// ..
dispatch_async(dispatch_get_main_queue(), {
println("i \(i) c \(c)")
if i == c-1 {
// extra stuff would come here
}
})
})
}
答案 0 :(得分:6)
执行闭包时,for循环已经完成,mvn compile
= i
。在for循环中需要一个辅助变量:
c
答案 1 :(得分:6)
您可以使用捕获列表 i
显式捕获[i]
的值
在闭包中,你不需要将它复制到一个单独的变量。
例如:
let c = 5
for var i=0; i<c; i++ {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
[i] in // <===== Capture list
dispatch_async(dispatch_get_main_queue(), {
println("i \(i) c \(c)")
})
})
}
输出:
i 0 c 5 i 1 c 5 i 2 c 5 i 3 c 5 i 4 c 5
答案 2 :(得分:2)
您需要声明一个变量(而不是迭代变量)才能获得正确的范围,例如
Redirect()