小编ito*_*sev的帖子

转义闭包中的结构到底是如何被捕获的?

对我来说,转义闭包将通过复制捕获结构似乎是合乎逻辑的。但如果是这种情况,下面的代码就没有意义,不应该编译:

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。这怎么可能?

struct closures swift

4
推荐指数
1
解决办法
854
查看次数

标签 统计

closures ×1

struct ×1

swift ×1