我想弄清楚在 Swift 闭包中捕获是如何工作的。
让我们假设下面的代码示例
class Worker {
let block: () -> Void
let id: String
init(id: String, block: @escaping () -> Void) {
self.id = id
self.block = block
}
}
var worker: Worker!
worker = Worker(id: "1", block: { _ in
print(worker.id)
})
在创建闭包的那一刻,worker 变量仍然是 nil。但是,闭包将成功捕获 worker 变量。
这是如何运作的?闭包如何保持对尚未初始化的变量的强引用?
最佳答案
Swift 中的闭包通过引用 捕获所有变量,就像声明为 __block
的变量如何被 Objective-C 中的 block 捕获一样。因此,在闭包创建后对闭包外部变量的更改在闭包运行时仍然可以看到。
关于swift - Swift 中的闭包如何在幕后捕获变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46607557/