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
)