我正在尝试弄清楚如何在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变量仍为零。但是,闭包将成功捕获worker变量。
这是如何工作的?闭包如何保持对仍未初始化的变量的强引用?
答案 0 :(得分:0)
Swift中的闭包通过引用捕获所有变量,就像Objective-C中的块捕获声明为__block
的变量一样。因此,在闭包运行之后,仍会在闭包中看到对闭包外部变量的更改。