KVO - 未调用 observe() changeHandler

KVO - observe() changeHandler not called

我想要实现的是 ViewController 观察 Model 的 属性。
但是,observe() 方法 changeHandler 没有被调用。
我该如何解决?

ViewController.swift

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        Model.sharedInstance.observe(\.dataSource, options: .new) { (dataSource, change) in
            print("updated! ", dataSource, change) // not called...
        }

        Timer.scheduledTimer(timeInterval: 2.0, target: Model.sharedInstance, selector: #selector(Model.update), userInfo: nil, repeats: true)
    }
}

Model.swift

class Model: NSObject {
    @objc dynamic var dataSource = [Dictionary<String, Any>]()

    class var sharedInstance: Model {
        struct Singleton {
            static let instance: Model = Model()
        }
        return Singleton.instance
    }

    @objc func update() {
        dataSource.append(["key": "value"])
    }
}

你需要对观察有很强的参考性

class ViewController: UIViewController {


    var ob:NSKeyValueObservation! /// the key item

    override func viewDidLoad() {
        super.viewDidLoad()

        ob = Model.sharedInstance.observe(\.dataSource, options: .new) { (dataSource, change) in
            print("updated! ", dataSource, change) // not called...
        }

        Timer.scheduledTimer(timeInterval: 2.0, target: Model.sharedInstance, selector: #selector(Model.update), userInfo: nil, repeats: true)
    }
}


class Model: NSObject {
    @objc dynamic var dataSource = [Dictionary<String, Any>]()

    class var sharedInstance: Model {
        struct Singleton {
            static let instance: Model = Model()
        }
        return Singleton.instance
    }

    @objc func update() {
        dataSource.append(["key": "value"])
    }
}

模型也会像这样简单

class Model: NSObject {

    @objc dynamic var dataSource = [[String:Any]]()

    static let sharedInstance = Model()

    @objc func update() {
        dataSource.append(["key": "value"])
    }
}