通过委托和协议在ViewController之间传递数据

我们都知道如何通过prepareForSegue方法在ViewController之间传递数据。 它有其自身的局限性和优势。 好消息是,这不是在ViewController之间传递数据的唯一方法。

在ViewController之间传递数据的最流行和最常用的方法之一是通过Delegate和Protocols。 在开始本教程之前,如果尚未开始,请阅读我关于协议的文章。 如果您了解协议,那么本文将更有意义。

与其说太多,不如让我们看一个例子,看看它是如何完成的。

让我们创建一个名为“间谍和基础”的单页应用程序。

现在删除默认的ViewController.Swift,然后再创建两个名为“ HomeBaseVC”和“ EnemyBaseVC”的ViewController。

创建ViewController之后,它应该如下所示。

现在是在StoryBoard中进行一些更改的时候了。 让我们打开情节提要,并将现有ViewController的类名称更改为“ HomeBaseVC”。

现在是时候向故事板添加另一个Viewcontroller并将其与ViewController类“ EnemyBaseVC”相关联了

现在是时候通过segue连接两个VC了。 我们将在“ HomeBaseVC”中添加一个名为“将我们的间谍发送到敌人的基地”的UIButton。 点击此按钮后,我们将进入“ EnemyBaseVC”。 (我将保留“自动布局”约束部分,因为它不是本教程的一部分)

我们将EnemyBaseVC显示为Modal(又名弹出窗口)。 还要确保segue标识符为“ sendSpySegue”。 查看下面的gif图片,了解如何完成此操作。

凉! 现在我们可以从我们的基地向间谍基地发送间谍了。 假设我们的间谍渗透了敌人的基地。 因此,现在该给他一个UIButton了,该按钮将使他能够入侵敌方通信系统并将数据传递回Home Base。

所以我要在“ EnemyBaseVC”中添加一个UIButton作为“ HACK AND SEND MESSAGE HOME”

因此,情节提要板应类似于以下内容。

在离开情节提要之前,让我们连接“ HACK AND SEND MESSAGE HOME”按钮,并创建一个IBAction。

是时候用数据设置“ EnemyBaseVC”了。 我将如下更新VC。 我希望这是自我解释。 另外请注意,我已经从VC中删除了所有样板代码,以提高可读性。

凉! 可以吗? 很棒,让我们做一些最后的调整。

发送消息时,首先关闭EnemyBaseVC。