【发布时间】:2019-08-18 13:42:06
【问题描述】:
由于 Xcode 10.2 (Swift 5) 在 deinit 范围末尾的 defer 语句产生:
作用域结束前的'defer'语句总是立即执行;替换为“do”语句以消除此警告
我们来看看这个例子:
var foo: String {
didSet {
// smt
}
}
deinit {
defer { <--- Warning
foo = bar
}
}
- 当然可以通过将代码从观察者移动到方法并显式调用它来消除此警告,但是……
此警告的意义何在? - 在 deinit 中包含 defer 语句是否合理? (例如,能够触发属性的观察者).
【问题讨论】:
-
如果您按照警告的建议执行操作并将
defer { }替换为do { },会发生什么情况? -
如果将 foo = bar 放在 deinit 的末尾而不使用 defer 会发生什么?
-
在这两种情况下,属性的观察者都不会被执行。建议的
do本身是多余的,观察者不会在init和deinit中运行。
标签: swift deinit property-observer