例如,我想在类实例上调用一个方法来添加willSet属性.我不想willSet在属性的声明中指定,因为我需要在观察者中添加条件逻辑,并且对于没有调用此方法的每个其他实例,它将被不必要地运行.
像这样的东西:
var someProperty: Int
func someMethod() {
someProperty { // this is the syntax/ability I'm unsure about
willSet { ...add some behavior... }
}
...more stuff...
}
Run Code Online (Sandbox Code Playgroud)
观察者可以添加到超类中声明的属性,但不能添加到同一类或类扩展中。您不能在函数中的两个位置声明相同的属性。我能想到的最好的解决方案是这样的,你有一个可选的闭包,你可以在 willSet 中评估它,并且只有当你想要观察行为时,你才为该属性分配一些东西。
也许是这样的:
private var _willSetCallback: ((Int) -> (Bool))?
var someProperty: Int {
willSet {
if let optionalBool = _willSetCallback?(newValue) {
// do something
}
}
}
func someMethod() {
self._willSetCallback = { newValue in
return newValue > 0
}
}
Run Code Online (Sandbox Code Playgroud)
它不是特别优雅,但它可能或多或少可以处理您想要的行为?
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |