对我来说,转义闭包将通过复制捕获结构似乎是合乎逻辑的。但如果是这种情况,下面的代码就没有意义,不应该编译:
struct Wtf {
var x = 1
}
func foo(){
var wtf = Wtf()
DispatchQueue.global().async {
wtf.x = 5
}
Thread.sleep(forTimeInterval: 2)
print("x = \(wtf.x)")
}
Run Code Online (Sandbox Code Playgroud)
然而它编译成功,甚至在调用 foo 时打印 5。这怎么可能?