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

読み取り専用でない場合:

1 つのオプションは、ライブラリ オブジェクトをサブクラス化し、設定するプロパティをオーバーライドすることです。willSet次に、サブクラス内に実装できます。

class Object {
    var property: Float = 0.0
}


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

        }
    }
}

これは、Apple がドキュメントで推奨している方法です(「プロパティ オブザーバーのオーバーライド」を参照)。

プロパティのオーバーライドを使用して、継承されたプロパティにプロパティ オブザーバーを追加できます。これにより、プロパティが最初にどのように実装されたかに関係なく、継承されたプロパティの値が変更されたときに通知を受けることができます。

読み取り専用の場合:

オブジェクトが から継承している場合、またはSwift でマークされている場合は、 Key-Value Observingを使用できる場合があります。NSObjectdynamic

于 2015-07-27T19:51:10.123 に答える