gpt4 book ai didi

swift - Swift 中的闭包如何在幕后捕获变量?

转载 作者:行者123 更新时间:2023-11-28 08:01:20 25 4
gpt4 key购买 nike

我想弄清楚在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com