例如,我想在类实例上调用一个方法,该方法将willSet
添加到属性中。我不想在属性声明中指定willSet
,因为我需要在观察者中添加条件逻辑,并且它将不必要地为每个其他实例运行还没有这种方法叫做。
这样的事情:
var someProperty: Int
func someMethod() {
someProperty { // this is the syntax/ability I'm unsure about
willSet { ...add some behavior... }
}
...more stuff...
}
答案 0 :(得分:3)
可以将观察者添加到超类中声明的属性,但不能添加到同一个类或类扩展中。您不能在函数中的两个位置声明相同的属性。我能想到的最好的解决方案是这样的,你有一个可选的闭包,你在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
}
}
它不是特别优雅,但它可能或多或少地处理你想要的行为?