[英]How do closures in Swift capture variables under the hood?
我正在嘗試弄清楚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。 但是,閉包將成功捕獲工作變量。
這是如何運作的? 閉包如何保持對尚未初始化的變量的強引用?
Swift中的閉包通過引用捕獲所有變量,就像用Objective-C中的塊捕獲聲明為__block
變量一樣。 因此,在創建閉包之后,在閉包運行時仍會在閉包外部看到對變量的更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.