2016-09-01 10 views
0

Хорошо, у меня проблема с функцией addObserver в Swift. Как это возможно, если я изменю значение объекта A, на который реагирует объект B? (Без знает B, но B имеет переменную со ссылкой на А)Наблюдатель, прослушиватель событий, KVO в iOS Swift

, например, здесь:

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 изменилось оно должно быть notificated, только если что-то я хочу случилось в А -> notifyate B. Мысль о шаблоне наблюдателя, но, возможно, кто-то объяснит, если это возможно.

ответ

0

Что-то вроде этого:

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 
 
    ... 
 
    } 
 
}

+0

не работает .. Говорит только, что все не существует в классе B, но это делает. – Lirf

+0

Извините, он работает очень хорошо! является ли производительность хорошей для таких вещей? – Lirf

+0

Полезно знать. Не должно быть никакого влияния на производительность. Для вашего случая использования просто помните, что «наблюдатель» в классе A должен быть слабым. –