Swift中KVO使用

1、对需要监听的对象添加 @objc dynamic修饰 、使用的KVO监听及对应方法才会起作用。

//在自定义的UITableViewCel中使用案例
class MessageTableViewCell:UITableViewCell{
    @objc dynamic var msgModel = MessageModel()

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.addObserver(self, forKeyPath: "msgModel", options: NSKeyValueObservingOptions.new, context: nil)
    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if ((keyPath == "msgModel")&&(change?[NSKeyValueChangeKey.newKey] != nil)) {
            //Doing something  
        }
    }

    deinit {
        self.removeObserver(self, forKeyPath: "msgModel", context: nil)
    }
}

2、Swift中willSet和didSet这两个方法,本身就用来监听属性的变化,也可以不使用KVO的监听方法。

你可能感兴趣的:(Swift开发)