NotificationCenter addObserver(наблюдатель: селектор: имя: объект) - что такое объект?
У меня проблемы с пониманием того, что object
параметр находится в NotificationCenter.default.addObserver(observer:selector:name:object)
Если я правильно понимаю, это действует как своего рода фильтр; будут наблюдаться только уведомления, отправленные с этого объекта. Но я не могу понять, как его использовать.
Я создал класс и сделал глобальный экземпляр этого
class FooClass {
func postNotification() {
NotificationCenter.default.post(name: NSNotification.Name("TestNotification"), object: self)
}
}
let globalFoo = FooClass()
Затем в моем первом ViewController я нажимаю кнопку, которая вызывает globalFoo.postNotification()
Затем во втором ViewController я зарегистрировался так:
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(notificationReceived), name: NSNotification.Name("TestNotification"), object: globalFoo)
}
func notificationReceived() {
print("notification received")
}
}
Работает нормально, когда я не указываю object
(то есть ноль), так что я явно не понимаю, что это такое.
2 ответа
object
Параметр, используемый при публикации уведомления, указывает, какой объект фактически публикует уведомление.
При добавлении наблюдателя вы можете оставить object
ноль, и вы получите все названные уведомления независимо от того, какой объект фактически отправил уведомление. Или вы можете указать конкретный объект при добавлении наблюдателя, и вы будете уведомлены только тогда, когда этот конкретный объект отправит именованное уведомление.
Некоторые уведомления используют этот параметр, чтобы предоставить более подходящую информацию observer
,
Например, уведомления типа NSManagedObjectContextObjectsDidChange
по желанию принимает NSManagedObjectContext
объект, чтобы он мог уведомлять об изменениях только из этого контекста.