Swift中的NSNotificationCenter addObserver
本文的目的是解释一个iOS应用程序如何使用NSNotificationCenter发送和接收变化事件。
在一个iOS应用程序中,你可能需要在应用程序的任何地方发送和接收事件。当你需要在应用中的任何地方接收事件时,使用NSNotificationCenter类可能是有用的。在这种情况下,你可以监听事件并作出相应的反应。
Foundation框架中的NSNotificationCenter类,提供了一个向注册的观察者广播通知的机制。它允许对象之间相互通信,并对程序中发生的事件做出反应。
如何发布一个事件
语法
NotificationCenter提供了一个post()方法来发送一个事件。要发布一个事件,你必须把通知的名称作为一个身份传递。如果你不想发送任何其他信息,你可以忽略对象和用户信息。
示例
下面是一个如何使用NSNotificationCenter发布通知的例子 —
如何接收一个事件
语法
NotificationCenter提供了一个addObserver()方法来接收一个事件。为了监听一个事件,你必须在目标通知名下添加一个观察者。如果你发送一个对象,你将会收到一个对象。
示例
下面是一个如何使用NSNotificationCenter来接收通知的例子 —
在这个例子中,用户实例使用NSNotificationCenter的post方法发布了 “UserLoggedOut “通知。HomeController类被注册为该通知的观察者,当收到该通知时,它的handleLoggedOutNotification方法被调用。
必须注意的是,通知是异步广播的,这意味着观察者可能不会在通知发布后立即收到通知。
管理你的自定义通知
在实际应用中,你可能需要发送和接收多个具有自定义名称的通知。一旦你发布了一个通知,你就必须传递NSNotificationName对象来识别该通知。
示例
要注册你自己的自定义通知,我们建议你为NSNotification.Name类写一个扩展,并将你所有的相关通知添加到其中。比如说。
我们正在扩展NSNotificationName并添加不同的通知名称。
现在,在发送和接收通知时,将很容易提供名称,就像下面这样——。
- NotificationCenter.default.post(notification:) – 如果你只需要发布一个没有任何背景的通知,请使用此方法。
-
NotificationCenter.default.post(name:object:) – 如果你需要发布通知并关心谁在发布,请使用此方法。对象人是发送者,是发布通知的对象。
-
NotificationCenter.default.post(name:object:userInfo:) – 这个方法是最完整的一个。你指定通知的名称、对象(又是发送者)和一个userInfo字典。你可以使用这个字典来向观察者提供额外的数据。在我们的例子中,我们可以提供刚刚添加到应用程序中的图片。
结论
当你使用NotificationCenter类来发送和接收事件时,请记住它们会在整个应用程序中广播这些信息。你必须非常小心地发布和接收事件,并且只在需要时才发布。