1.添加监听
   lab1.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)



2. 监听
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if let old = change?[NSKeyValueChangeKey.oldKey] {
          print("old = \(old)") //
        }
              
        if let new = change?[NSKeyValueChangeKey.newKey] {
          print("new = \(new)") // Albert
        }
    }


3.移除KVO
    deinit {
        lab1.removeObserver(self, forKeyPath: "text")
    }

 

2.添加多个KVO

       lab1.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
        lab1.addObserver(self, forKeyPath: "frame", options: .new, context: nil)



    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "text"{
            print("text改变")
        }else{
            print("frame 改变")
        }
        if let old = change?[NSKeyValueChangeKey.oldKey] {
          print("old = \(old)") //
        }
              
        if let new = change?[NSKeyValueChangeKey.newKey] {
          print("new = \(new)") // Albert
        }
    }

    deinit {
        lab1.removeObserver(self, forKeyPath: "text")
        lab1.removeObserver(self, forKeyPath: "frame")
    }

  

 

3. 两个label 都监听了 text, frame

        lab1.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
        lab1.addObserver(self, forKeyPath: "frame", options: .new, context: nil)
        
        lab2.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
        lab2.addObserver(self, forKeyPath: "frame", options: .new, context: nil)




    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if lab1.isEqual(object){
            print("lab1 改变")
            if keyPath == "text"{
                print("lab1 text改变")
                if let old = change?[NSKeyValueChangeKey.oldKey] {
                    print("old = \(old)") //
                  }
                        
                  if let new = change?[NSKeyValueChangeKey.newKey] {
                    print("new = \(new)") // Albert
                  }
            }else{
                print("lab1 frame 改变")
                if let old = change?[NSKeyValueChangeKey.oldKey] {
                    print("old = \(old)") //
                  }
                        
                  if let new = change?[NSKeyValueChangeKey.newKey] {
                    print("new = \(new)") // Albert
                  }
            }
        }else{
            
            print("lab2 改变")
            if keyPath == "text"{
                print("lab2 text改变")
            }else{
                print("lab2 frame 改变")
            }
        }
    }



    deinit {
        lab1.removeObserver(self, forKeyPath: "text")
        lab1.removeObserver(self, forKeyPath: "frame")
        lab2.removeObserver(self, forKeyPath: "text")
        lab2.removeObserver(self, forKeyPath: "frame")
    }

  

posted on 2020-09-28 17:55  懂事长qingzZ  阅读(260)  评论(0编辑  收藏  举报