0

我想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

4

2 回答 2

1

如果不是只读的:

一种选择是对库对象进行子类化并覆盖您要设置的属性。然后,您可以willSet在子类中实现:

class Object {
    var property: Float = 0.0
}


class ChildObject: Object {
    override var property: Float {
        willSet {
            print("Set in child class")

        }
    }
}

这是 Apple 在文档中推荐的方式(请参阅“Overriding Property Observers”):

您可以使用属性覆盖将属性观察者添加到继承的属性中。这使您能够在继承属性的值发生更改时收到通知,而不管该属性最初是如何实现的。

如果只读:

如果对象继承自,或者它已在 Swift 中标记,您可能可以使用Key-Value Observing 。NSObjectdynamic

于 2015-07-27T19:51:10.123 回答
-1

此属性是 IBInspectable 属性吗?在 Objetive-C 中,如果这是一个通过 getter 和 setter 的属性,这是自动的,但在 Swift 中不是。您可以将此属性设为私有并创建设置此属性的方法,并在此方法中添加对另一个方法的调用。

func setResting(resting:Bool) {
    self.isResting = resting
    //call another method here
}
于 2015-07-27T19:41:42.800 回答