通过价值关闭?

时间:2015-07-22 14:20:14

标签: ios swift block

我希望在处理完最后一项后执行额外的逻辑,但终端显示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
            }
        })
    })
}

3 个答案:

答案 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()