gpt4 book ai didi

swift - 存储在类属性中的闭包

转载 作者:行者123 更新时间:2023-11-28 13:39:26 38 4
gpt4 key购买 nike

不明白为什么编译器会在这段代码上出错

class Addr {

var num: Int = 0
lazy var increment: (Int) -> () = {[unowned self] value in
self.num += value
print(self.num)
}
deinit {
print("deinit")
}
}

do {
let object = Addr().increment(5) // ERROR
}

当然,我可以将捕获列表 [unowned self] 更改为 [weak self],但我试图理解为什么这段代码不起作用。为什么对象在调用属性之前被deinit。感谢您对此机制的高级解释。

最佳答案

问题在于,由于您没有存储对 Addr 对象的引用,它会立即被释放,甚至在 increment 被调用之前。

Addr 存储在变量中,然后对该变量调用 increment 即可解决问题。

let object = Addr()
object.increment(5)

关于swift - 存储在类属性中的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235386/

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