使用KVO来判断元素何时添加到数组中

时间:2016-04-02 18:03:18

标签: arrays swift key-value-observing

我想检查是否已使用KVO在swift中将元素添加到数组中,并且我基本上从Apple的文档中复制了该示例,但是当代码运行时,它不会在数组大小更新时捕获。这就是我现在所拥有的:

class ShowDirectory: NSObject {
    var shows = [Show]()
    dynamic var showCount = Int()
    func updateDate(x: Int) {
        showCount = x
    }
}

class MyObserver: NSObject {
    var objectToObserve = ShowDirectory()
    override init() {
        super.init()
        objectToObserve.addObserver(self, forKeyPath: "showCount", options: .New, context: &myContext)
    }

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        if context == &myContext {
            if let newValue = change?[NSKeyValueChangeNewKey] {
                print("\(newValue) shows were added")
            }
        } else {
            super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
        }
    }

    deinit {
        objectToObserve.removeObserver(self, forKeyPath: "myDate", context: &myContext)
    }
}

在我将数组添加到数组之后,我将showCount设置为等于数组中元素的数量,但是,它不会向控制台打印“X shows are added”。我的viewDidLoad()函数只是调用向数组添加元素的函数,而不是其他任何东西。

1 个答案:

答案 0 :(得分:1)

您遗憾的是,您无法作为观察者添加到NSObject,因为它不会将<?php if(isset($_POST['action'])) { echo $_POST['action']; } ?>

作为子类

查看Apple Docs并搜索&#34;键值观察&#34;

  

只要该类继承自NSObject类,就可以对Swift类使用键值观察。

否则,您的KVO样板代码看起来不错。

如果您想在阵列内容发生变化时收到通知,可以尝试@Paul Patterson推荐的内容和use a proxy object