不明白为什么编译器会在此代码段上产生错误
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
}
当然,我可以将捕获列表中的[未拥有的自我]更改为[弱的自我],但是我试图理解为什么此代码无法正常工作。为什么在调用属性之前将对象取消初始化。感谢对此机制的高级解释。
答案 0 :(得分:1)
问题在于,由于您没有存储对Addr
对象的引用,因此即使在调用increment
之前,它也会立即被释放。
将Addr
存储在变量中,然后在变量上调用increment
解决了这个问题。
let object = Addr()
object.increment(5)