swift - 闭包存储在类属性中
问题描述
不明白为什么编译器会在此代码段上出错
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)
推荐阅读
- c# - 使用 client_Id 和 client_secret 为共享点生成访问令牌时出现未经授权的异常
- azure - 与本地相比,从 Azure 运行时,Powershell AzureAD 模块返回不同的对象
- python-3.x - 如何以迭代方式根据列中的特定值对数据框进行切片并创建新的数据框?
- java - java中的代码为ImageView设置图像?
- angular - Angular 8 测试 - 未找到 Devextreme Grid 子节点
- osgi - 使用服务组件运行时导出多个服务
- flutter - 已定义如何在文件小部件之外使用全局键
- laravel - Laravel - 汇总总和仅适用于每页
- python - 导入模块的问题:ModuleNotFoundError
- java - 在 jenkins 管道中连接到 MySQL 容器