在Swift 3中使用NSNotificationCenter

在iOS开发过程中的某个时刻,两个实体将不可避免地需要发送和接收信息,而作为开发人员,则由您自己决定如何做。 在本文中,我们将介绍使用NotificationCenter发送信息。 NotificationCenter并不像名称所暗示的那样用于将通知发送到用户的电话,而是使您的代码能够根据特定情况发送和接收警报。

在许多软件开发中,有不止一种工具可以解决问题,因此有多种工具可供选择。 如果希望事件在代码的某一部分(例如,View Controller)中发生事件,以在代码中的其他地方触发某些事件,则可以使用通知。

这类似于通过利用Swift协议向委托传递信息。 当一个动作被触发时,另一个对象(希望)正在监听该事件,并且当它们接收到被触发的消息时,将采取进一步的动作。 使用委托,您可以传递可以由委托所遵循的协议中的功能操纵的特定信息。 这允许单独的对象传递回或传递信息以便进行操作。 。 如果您希望代码的一部分对其他代码大声喊叫,则通知非常有用。 如果您收到我的来信,请执行一些操作! 那是什么,这取决于你!”

在此示例中,我将在选项卡栏控制器的第二个选项卡中设置“通知”观察器。 在SecondViewController的viewDidLoad内部,我将初始化一个Notification观察器,该侦听器将侦听FirstViewController中被点击的按钮。 当按下该按钮时,SecondViewController将更改其背景颜色。 这就是实际情况。

请注意,我首先切换选项卡,然后转到SecondViewController,屏幕为黄色。 这是我将视图控制器设置为的初始颜色,但它也说明了重要的一点。 我将NotificationCenter观察器放在SecondViewController的viewDidLoad中。 因此,需要初始化SecondViewController,以便可以调用viewDidLoad,随后观察者可以开始侦听。 在您的应用程序中设置Notifications时要意识到这一事实,这可能是任何人都未听到Notification帖子的原因。

代码

通知要求将名称附加到通知帖子或通知观察者。 名称就像关键字,可以帮助标识观察者应该收听的Notification帖子。 您的代码中可能有两个不同的通知,它们执行两项非常不同的操作。 能够唯一地命名此项目,使您能够确定要发布的通知和正在监听的通知。

如果我意识到需要在我的所有应用程序中进行更改,那么我已经开始习惯于使用扩展来减少代码的重复性,并使代码更易于操作。 我在Notification.Name上使用扩展名,因此我可以轻松访问在代码中使用的所有唯一名称(将它们视为每个Notification的唯一代码)。

扩展名的值为“ tabvc”,因此Notification.Name现在可以访问tabVC属性并传递“ tabvc”名称。

这就是在这个简单应用程序中FirstViewController的外观。

我们有一个按钮和我们的viewDidLoad。 在此示例中,我们的viewDidLoad只是将颜色更改为更可识别,并且当我们按下按钮时,我们发布了Notification。

现在我们已经发布了Notification,现在可以设置观察者以在触发changeColorButtonPressed后执行我们想要的操作,因此可以发布Notification。

这就是我们的SecondViewController的样子。 在viewDidLoad中,我们将初始背景色设置为黄色,并且还设置了NotificationCenter观察器。 我们使用先前在Notification.Name上进行的扩展名传递名称,这与发布Notification时使用的扩展名相同。 您可以将其视为收音机,观察者正在将其调整为与帖子发出的频率相同。 然后,我们设置一个选择器,以在观察者检测到发布的帖子在应用程序中的任何位置具有相同名称时,调用changeBackgroundColor函数。 一旦发生这种情况,SecondViewController的背景颜色就会更改。

在此示例中,我将nil传递给对象变量,但是在您的代码中,您可以传递有关要发布的Notification的特定信息。 如果您发现自己传递了很多信息,则可能需要考虑使用委托,因为可以对委托进行微调以精确地完成您想要的事情,并使他人更容易阅读您的代码以跟踪事件的进展。

感谢Stack Overflow和Apple文档提供的信息。 编码愉快!