class NotificationCenter : NSObject
Notification Center — это механизм, осуществляющий доставку данных о событиях до подписанных на эти события наблюдателей (observers). Отслеживаемые события могут быть как системные (например появление/скрытие клавиатуры, изменение ориентации экрана), так и собственные.
По умолчанию экземпляр Notification Center в приложении доступен через конструкцию NotificationCenter.default. Но при необходимости можно создать дополнительные экземпляры Notification Center, для того, чтобы разграничить передачу данных о событиях.
Все передаваемые с помощью Notification Center события — это экземпляры структуры Notification (используется по умолчанию) или класса NSNotification (используется в старых версиях операционных систем при разработке на Objective-C, а также когда необходима ссылочная семантика).
ПРИМЕЧАНИЕ
Notification Center не имеет ничего общего с push-уведомлениями, локальными уведомлениями или с отображением уведомлений в системе.
Для создания наблюдателя используется метод addObserver.
NotificationCenter.default.addObserver(
%наблюдатель%,
selector: %метод, выполняемый при поступлении события%,
name: %Событие, за которым необходимо наблюдать%,
object: %передаваемый объект%
)
Selector должен указывать на метод, принимающий в качестве входного параметра значение типа Notification.
@objc func keyboardWillHide(_ notification: Notification) {
// ...
}
Аргумент name определяет событие, за которым будет вестись наблюдение. Классы UIResponder и Notification.Name имею большое количество встроенных событий, например:
UIResponder.keyboardWillShowNotification — клавиатура будет отображенаUIResponder.keyboardDidShowNotification — клавиатура была отображенаUIResponder.keyboardWillHideNotification — клавиатура будет скрытаUIResponder.keyboardDidHideNotification — клавиатура была скрытаUIResponder.keyboardWillChangeFrameNotification — у клавиатуры будет изменен frameUIResponder.keyboardDidChangeFrameNotification — у клавиатуры был изменен frameNotification.Name.NSBundleResourceRequestLowDiskSpace — низкий объем доступного дискового пространстваNotification.Name.CKAccountChanged — статус аккаунт iCloud изменен (используется при работе с CloudKit).Notification.Name.NSSystemClockDidChange — системные часы были измененыи многое-многое другое.
Для указания на отслеживаемое событие во входной параметр name метода addObserver передается значение типа Notification.Name. При необходимости можно создать собственное событие с помощью инициализатора данного типа.
NotificationCenter.default.addObserver(
%наблюдатель%,
selector: %метод, выполняемый при поступлении события%,
name: Notification.Name("userDidLogout"),
object: %передаваемый объект%
)
В данном примере создается наблюдатель за событием userDidLogout.
Теперь, чтобы отправить данное событие в произвольном месте проекта у экземпляра класса NotificationCenter необходимо вызвать метод post.
NotificationCenter.default.post(name: NotificationCenter.Name("userDidLogout"), object: nil)
В качестве аргумента object может быть передан произвольный объект, который будет извлечен внутри вызываемого метода с помощью конструкции object входного параметра типа Notification, например:
@objc func userDidLogout(_ notification: Notification) {
let user = notification.object
}
// появление клавиатуры
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
// скрытие клавиатуры
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillHide),
name: UIResponder.keyboardWillHideNotification,
object: nil
)