почему внутренний взгляд наблюдателя никогда не вызывается
Есть две причины (т. Е. Вы неправильно сделали две несвязанные вещи).
Вы позволили наблюдателю исчезнуть. Он возвращается при вызове на observe
, но вы не захватываете его и не сохраняете. Таким образом, наблюдение заканчивается до того, как что-либо может случиться. (Вы делаете ту же ошибку и при первом наблюдении, но тот факт, что вы бежите на игровой площадке, скрывает это. Это еще один пример того, почему игровые площадки - это работа дьявола.)
Вы заменили другого человека (view.person = lewis
). Таким образом, человек, чье имя изменилось, не тот человек, которого мы наблюдали; человек, которого мы наблюдали, уже прекратил существование.
Итак, эта перезапись исправит это:
@objc class Person: NSObject {
@objc dynamic var name = "Taylor Swift"
}
@objc class View: NSObject {
var person = Person()
var ob : NSKeyValueObservation?
override init() {
super.init()
self.ob = self.person.observe(\.name, options: .new) { (person, change) in
print("I changed my name to \(person.name)")
}
}
}
let view = View()
view.person.name = "Lewis"