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 объект, чтобы он мог уведомлять об изменениях только из этого контекста.

Другие вопросы по тегам