将willSet块分配给iOS isResting属性

时间:2015-07-27 19:35:20

标签: ios swift scenekit swift2 didset

我想将willSet语句设置为 isResting 属性。每当 isResting 更改时,都会调用某个函数。这就是我的意思:

starNode.physicsBody?.isResting: Bool = false{
    willSet{
       if newValue == true{
           print("GOOGOO")
       }else{
           print("STOP")
       }
   }
}

这不起作用。您可以将willSet或didSet分配给已定义的iOS属性吗?如果没有,我如何得到类似的效果?

这是文档:

  

https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SceneKit_Framework/index.html#//apple_ref/doc/uid/TP40012283

     

https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNPhysicsBody_Class/index.html#//apple_ref/occ/instp/SCNPhysicsBody/isResting

2 个答案:

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