在Swift中通过委托传递数据

我想写一篇直截了当的文章。 直截了当,这样我们就可以看一下本文并知道如何在我们自己的项目中使用委托设计模式来传递数据。

我们走吧。

前提条件

强烈建议您首先阅读有关协议的信息。 您不必这样做,但这可能有助于巩固您的理解。

Swift 3中的协议简介

何时

我要说的是什么时候我们想通过委托传递数据。

考虑一下prepareForSegue,然后考虑相反的方向。 如果prepareForSegue指向前方,则委派指向后方。

假设prepareForSegue是从VCInitial到VCFnitial,则委派将是从VCFinal到VCInitial。 这是我们想要使用委托传递数据的时候。 这也是我们马上要做的事情!

设定

打开一个新的Xcode项目,然后随意调用它。 创建两个视图控制器。 将第一个命名为VCInitial,第二个命名为VCFinal。

应该看起来像:

现在将VCInitial嵌入导航控制器。 这样,我们在VCFinal上具有后退按钮。

嵌入后,应如下所示:

大。 现在让我们在VCInitialVCFinal之间创建一个VCFinal 。 调用segue VCInitialToVCFinal

现在在我们的VCInitial 。 我们想使用我们的标识符执行segue。 因此,创建一个按钮并将其连接到IBAction 。 调用IBAction函数btnPerformSeguePressed

看起来像:

然后在我们的IBAction内部,使用我们的标识符执行segue。

  performSegue(withIdentifier:“ VCInitialToVCFinal”,发送者:nil) 

现在为VCFinal创建一个按钮,并将其连接到IBAction 。 称之为btnPassDataPressed

半场演出

好的,欢迎收看半场比赛。 我们将回顾当晚的亮点。 好第一件事。

两个View Controller和两个按钮。 关系。

好了,这是半场表演的结尾。 我们现在正在转向协议。

实施委派

仍在VCFinal.swift 。 在最顶部创建一个协议。 最佳实践是在您的类名之后命名委托协议。 之后,我们将添加必需的方法func finishPassing(string: String)

应该看起来像这样:

 协议VCFinalDelegate { 
func finishPassing(字符串:字符串)
}

大。 我们的代码看起来很干净。

“那就是我喜欢的东西。”-布鲁诺·马尔斯

现在,在VCFinal类中,我们需要声明一个委托变量。

  var委托:VCFinalDelegate? 

然后在btnPassDataPressed函数内部,添加以下代码:

 委托?.finishPassing(字符串:“从VCFinal发送”) 

这基本上是说要为按下按钮时的懒惰做这件事。 我们的懒惰屁股是VCInitial。 我们将让VCInitial设置自己为懒惰的流氓,并稍等片刻就完成任务。

凉。 现在转到VCInitial.swift文件,并让VCInitial采用我们的VCFinalDelegate协议。

 类VCInitial:UIViewController,VCFinalDelegate 

现在,我们将在prepareForSegue函数中安全地将目标VCFinalVCFinal 。 然后将目的地的代表设置为self,因为我们希望VCInitial成为接收者。

 覆盖func prepare(用于segue:UIStoryboardSegue,发件人:任意?){ 
如果让destination = segue.destination为? VCFinal {
destination.delegate =自我
}
}

接下来,我们需要遵循VCFinalDelegate 。 继续,在finishPassing内部添加finishPassing函数。

  func finishPassing(string:String){ 
打印(“已通知”)
}

演示

继续并运行该项目。

现在,我们将看到从VCFinal接收到的数据。

恭喜发烧,我们杀了它。 0–100真实快速。

最后的评论

希望您喜欢并从我的文章中学到了宝贵的经验。 如果有的话,请点击那个❤按钮让我知道,然后在Medium上关注我。 另外,请分享这篇文章,以便您的圈子也可以获取一些知识。

对于那些感兴趣的人,这里是我的LinkedIn。

最后,如果您有任何评论,问题或建议,请随时将其放在下面。