通知中心快速介绍

开发iOS应用程序时,有许多方法可以在类之间传递数据和进行通信。 到目前为止,我主要依靠委托和segue在班级之间进行交流并传递数据。 但是,我最近遇到了另一个很棒的工具,称为“通知中心”,可以完成工作(不,这不是用于发送推送通知)。

Notification Center非常简单,为说明其工作原理,我将逐步介绍一个超级简单的应用程序。 该应用程序包含2个视图控制器。

目标是在Second View Controller上具有“发送通知”按钮,更改First View Controller上的文本标签,并在处理过程中将其传递给一些数据。

将通知中心视为驻留在您的应用程序中的大型手机信号塔。 当一个类(例如,本示例中的视图控制器)需要打给另一类的电话时,它将向通知中心发送信号,并提供与该信号相关的特殊键。 如果将任何其他视图控制器设置为该特殊键的Notification Center 观察者 ,则它们可以侦听信号,如果接收到信号,则它们可以完成自己的某些任务。 让我们在代码中看到这一点。

我们将从“第二个视图控制器”开始,因为这是将发送信号,为该信号分配键并传递数据的视图控制器。 在这里,我创建了一个用于说明用户数据的变量。 这个变量是一个字典[String:Any],您将明白为什么我现在把它做成字典。 这里的目标是将用户数据字典从第二个View Controller传递到第一个View Controller,然后让First View Controller对这些数据执行某些操作。

didPressSendNotification Action是神奇的地方。

一旦用户点击“发送通知”按钮,我们将把帖子发送到通知中心,并为该帖子分配一个特殊键(即Notification.Name)。 我们还将在这篇文章中传递数据。 数据必须为[AnyHashable:Any]形式,并传递到参数“ userInfo:”中。 这就是为什么我们创建字典来说明我们的用户数据的原因。

Notification.Name是一个字符串,可以将其设置为我们喜欢的任何内容。 这样,通知中心便知道如何将接收到的所有信号定向到正确的观察者。 我们只需要确保我们的观察者(即First View Controller)将侦听来自与该特殊键(即“通知名称”)相关的通知中心的信号即可。 让我们跳到“第一视图控制器”以确保其正确接收信号。

First View Controller中的代码如下所示:

在viewDidLoad中,我们将确保将“第一视图控制器”设置为观察者,并确保它观察到特殊键“ passUserName”的信号。 一旦收到信号,我们还将为它提供功能。 请注意,“ using”参数是一个采用类型(通知)->无效的闭包。 因此,我创建了另一个类型为(Notification)-> Void的函数,并将其命名为changeTextLabel。 在changeTextLabel函数中,我们可以从传递的字典数据中提取键“名称”的值,然后可以使用该信息来更新标签。