Swift中闭包的一般概念是否类似于Javascript中的闭包,还是使用了相同的单词“闭包”,但规则不同?具体来说,(引用我朋友的话) Javascript中的闭包是“水晶球,它只能在创建它的地方窥视”。
因此,在Javascript中,此代码工作:
var outside = 5;
function test() {
alert(outside); // returns 5
}这是否意味着在Swift中,如果我以任何可能的方式创建闭包,它将在创建闭包的同一范围内访问所有局部变量吗?
(我看过维基百科对程序设计中的闭包的定义,但它感觉太模糊了--具体来说,闭包跟踪的是什么值)
发布于 2014-07-10 21:49:37
Swift闭包捕获局部变量,因此满足您的“水晶球,只能窥视它创建的地方”的要求。
由于作用域的不同,Swift在循环中使用闭包的问题并不相同。
Swift等价物:
var funcs: [()->()] = []
for i in 0...3 {
funcs += {
println(i)
}
}
for i in 0...3 {
println(funcs[i]())
}产生结果0,1,2,3
https://stackoverflow.com/questions/24686806
复制相似问题