代码之家  ›  专栏  ›  技术社区  ›  Lirf

iOS Swift中的观察员、动作监听器、KVO

  •  0
  • Lirf  · 技术社区  · 8 年前

    如果我改变一个物体a的值,物体B会做出反应,那怎么可能呢?(没有A就知道B,但B有一个引用A的变量)

    例如:

    class A {
    var willChange: Int = 0
    
    // if something happened -> willChange = 1
    }
    
    class B {
      let someThing = A()
    
      //Something like this maybe but i don't really want to check, just get a notice
      if someThing.willChange != 0 {
      }
    
      func whatEver() {
      //called if willChange is changed
      ...
      }
    }
    

    不仅如果willChange更改了,还必须通知它,如果我想在A-gt;中发生任何事情,也必须通知它;通知B。 思考观察者模式,但如果可能的话,也许有人能用这个解释一下。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Peter Peng    8 年前

    类似这样:

    class A {
       weak var observer : AnyObject?
       var willChange: Int = 0{
         didSet{
              if let bObject = observer as? B{
                 bObject.whatEver()
              }
         }
       }
    }
    
    class B {
      let someThing = A()
      someThing.observer = self
    
      func whatEver() {
      //called if willChange is changed
      ...
      }
    }