Swift中闭包的一般概念类似于Javascript中的闭包,还是使用相同的单词" closure"但是有不同的规则?具体来说,(引用我的朋友)Javascript中的闭包是"水晶球,它只能在创建它的地方进行对等"。
因此,在Javascript中,此代码有效:
var outside = 5;
function test() {
alert(outside); // returns 5
}
这是否意味着在Swift中,如果我以任何可能的方式创建闭包,它将在创建闭包的同一范围内访问所有局部变量?
(我已经看过维基百科对closure in programming的定义,但感觉太模糊了 - 具体来说,什么价值观是关闭跟踪的?)
答案 0 :(得分:0)
Swift闭包捕获局部变量,以满足您的“只能在创建它的位置”的“水晶球”要求。
由于范围存在差异,Swift不会遇到在循环中使用闭包的相同问题
JavaScript closure inside loops – simple practical example
Swift等价物:
var funcs: [()->()] = []
for i in 0...3 {
funcs += {
println(i)
}
}
for i in 0...3 {
println(funcs[i]())
}
产生结果0,1,2,3