在iOS库类的现有属性上添加属性观察器

时间:2017-09-29 07:50:06

标签: ios swift sprite-kit skphysicsbody overrides

在我的SpriteKit游戏中,我想在fieldBitMask属性上为我的精灵的SKPhysicsBody添加一个属性观察者。我希望在fieldBitMask属性发生变化时收到通知,以便我可以采取一些措施。

我覆盖SKPhysicsBody但是当我尝试将重写的类分配给像普通SKPhysicsBody对象这样的精灵节点时,我遇到了一堆错误。我还考虑过对SKPhysicsBody进行扩展,但Apple文档说,“扩展可以为类型添加新功能,但它们不能覆盖现有功能。”因此我似乎无法覆盖{{1}这种方式使它成为一个属性观察者。

我知道如何在我创建的新自定义类中创建属性观察器。但是,将属性观察者添加到属于Apple库的类中的现有属性的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

我认为你可以使用Key Value Observing。您可以将观察者添加到更改的属性中 您应该在观察者类中使用implement observeValue(forKeyPath:of:change:context:)方法。

Here你可以找到Swift示例(" Key-Value Observing"部分)。

答案 1 :(得分:2)

您可以像这样继承SKPhysicsBody

class Subclass: SKPhysicsBody {
    override var fieldBitMask: UInt32 {
        didSet {
            print(fieldBitMask)
        }
    }
}