簡體   English   中英

Swift中的閉包如何在后台捕獲變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM