初始声明后可以添加属性观察者吗?

时间:2014-10-19 17:51:01

标签: swift

例如,我想在类实例上调用一个方法,该方法将willSet添加到属性中。我不想在属性声明中指定willSet,因为我需要在观察者中添加条件逻辑,并且它将不必要地为每个其他实例运行还没有这种方法叫做。

这样的事情:

var someProperty: Int

func someMethod() {
    someProperty {  // this is the syntax/ability I'm unsure about
        willSet { ...add some behavior... }
    }

    ...more stuff...
}

1 个答案:

答案 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
    }
}

它不是特别优雅,但它可能或多或少地处理你想要的行为?