首页 > 试题广场 >

下面的代码输出是什么?并说明理由。

[问答题]

Swift 1.0 or later

下面的代码输出是什么?并说明理由。

1
2
3
4
5
6
7
8
9
var thing = "cars"
let closure = { [thing] in
print("I love \(thing)")
}
thing = "airplanes"
closure()
推荐

输出的是:I love cars。当闭包被声明的时候,抓捕列表就复制一份thing变量,所以被捕捉的值并没有改变,即使你给thing赋了一个新值。

如果你要忽视闭包中捕捉列表的值,那么编译器引用那个值而不是复制。这种情况下,被引用变量的值的变化将会反映到闭包中,正如下面的代码所示:

1
2
3
4
5
6
7
8
9
var thing = "cars"
let closure = {
print("I love \(thing)")
}
thing = "airplanes"
closure() // Prints "I love airplanes"
发表于 2018-07-12 20:39:20 回复(0)