我想将willSet
语句设置为 isResting
属性。每当 isResting
更改时,都会调用某个函数。这就是我的意思:
starNode.physicsBody?.isResting: Bool = false{
willSet{
if newValue == true{
print("GOOGOO")
}else{
print("STOP")
}
}
}
这不起作用。您可以将willSet或didSet分配给已定义的iOS属性吗?如果没有,我如何得到类似的效果?
这是文档:
答案 0 :(得分:1)
如果不是只读:
一个选项是子类化库对象并覆盖您要设置的属性。然后,您可以在子类中实现willSet
:
class Object {
var property: Float = 0.0
}
class ChildObject: Object {
override var property: Float {
willSet {
print("Set in child class")
}
}
}
这是Apple在documentation中推荐的方式(参见"覆盖属性观察者"):
您可以使用属性覆盖将属性观察者添加到 继承财产。这使您可以在获得值时得到通知 无论该属性如何,继承的属性都会更改 最初实施。
如果只读:
如果对象继承自NSObject
,或者已在Swift中标记为dynamic
,则可以使用Key-Value Observing。
答案 1 :(得分:-1)
此属性是否为IBInspectable属性? 在Objetive-C中,如果这是一个通过getter和setter的属性,这是自动的,但在Swift中它不是。您可以将此属性设置为私有,并创建用于设置此属性的方法,并在此方法中添加对另一个方法的调用。
func setResting(resting:Bool) {
self.isResting = resting
//call another method here
}