Tag: 完成处理程序

完成处理程序:Swift

完成其他任务时执行。 介绍: 当我开始学习Swift时,我非常困惑一些概念完成处理程序就是其中之一。 在本文中,我将解释什么是完成处理程序及其工作方式以及为什么需要它。 在学习完成处理程序之前需要了解什么: 为了清楚地了解完成处理程序,我们需要了解闭包的基础,练习闭包,关于同步和异步功能的一点点知识。 您可以在这里聊天我发表的有关闭包的文章。 为什么我们需要完成处理程序: 在函数中,如果我们需要完成另一个任务之后再执行任何任务,而不是如何实现它。就像我们在完成下载后将更新UI那样,如何实现它? 换句话说,我们如何进行有序执行? 所有这些类型的问题解决了完成处理的概念。 制作完成处理程序: 创建一个完成处理程序闭包,然后将其传递给函数。 在这里,我们创建一个完成处理程序闭包,其类型为()→Void。现在,我们将创建一个可以使用此闭包的函数.. 在这里,我们创建一个函数,该函数带有()→Void类型的参数。现在通过调用像这样的函数来实现此功能。 因此,必须先执行takeCompletehandler主体语句,而不是执行编译处理程序。 控制台将像。 从函数主体 从完成处理程序开始! 让我们举另一个例子: 让我们做一个从服务器下载数据,并在完成下载后给用户通知的功能。 首先创建下载功能。 下载完成后,此函数可以使用一个闭包和一个bool参数。完成处理程序参数取真值并发出通知。现在,让create和完成处理程序闭包将采用bool值,但不返回任何内容…… 让我们实现功能 因此,它应该打印从服务器下载的数据..比打印“完全下载数据”要大100倍 //打印此 从sarver 下载数据…从sarver 下载数据…从sarver 下载数据…从sarver 下载数据 …从sarver 下载数据… …… 完整的下载数据 直接将Closure作为完成处理程序传递: 我们知道我们可以直接在函数参数上写闭包,所以让我们实现这个.. 这也打印相同,完成处理程序将在下载完成后执行..并给出通知… 短手 我们也可以这样写得很短: 在这里,我们不使用参数,而是使用swift默认参数。 现在,如果我们使用Trilling闭包,我们也可以像这样使用 因此,最后我们很清楚,抱怨处理程序无非就是在函数中传递闭包,并在其他操作完成后使其执行。 通过完成处理程序传递数据: 我们可以通过完成处理程序传递数据。 首先创建一个可以接受类型([String])→无效的函数 让我们实现这个 现在,控制台应该比完成打印处理程序数组打印“做一些工作”十倍。 做一些工作 做一些工作 做一些工作 做一些工作 …… …… // […]

在Swift中为函数创建完成回调

如果您问我:什么是“完成”? 我会回答这个问题:在我看来,完成就像每顿饭中的甜点,它们不是必不可少的,但它们仅在您完成主菜时才使用。 请记住,补全仅在函数的末尾运行。 我们看到完成的最常见的地方是下面的两个坏男孩。 dismiss(动画:Bool,完成:(()-> Void)?)present(viewControllerToPresent:UIViewController,动画:Bool,完成:(()-> Void)?) 它们非常方便,例如,我有一个类型为Boolean的变量,并且我想在其中完成一个函数的调用时将其状态从true更改为false,然后可以将下面的代码放到完成块中,将在函数末尾被调用,因此我的变量将为false。 变量=!变量 实际上,它并不像看起来那样难。 当您点击键盘上的“ enter”键时,我们将创建相同的效果,Xcode会自动为您打开补全框。 为了最大程度地减少使用自己的功能时的工作量。 1.创建一个函数: 功能展示(didFinish:Bool){ 打印(didFinish) } 2.现在,将完成块添加到函数中: 不要忘记问号,因为餐后甜点不是必不可少的,所以完成块也是如此,在某些情况下,不需要完成块。 函数演示(didFinish:Bool,完成:(()-> Void)?= nil){ 打印(didFinish) } 3.实施: 我们必须确保完成块中有内容,因此请先检查是否为nil,如果为nil,则从此处返回该函数,否则请继续。 函数演示(didFinish:Bool,完成:(()-> Void)?= nil){ 打印(didFinish) 后卫完成!=除此以外{ 返回 } 完成!() } 让我们使用它 var demo = true 示范(didFinish:演示){ 演示=!演示 打印(演示) } //输出: //正确 //错误 附言:如果您在函数中使用动画,则将完成块放在后面将无法解决问题,您必须为完成添加一个延迟(恰好是动画要花费的时间)。就像是: DispatchQueue.main.asyncAfter(截止日期:.now()+ YourAnimationTime){ 完成!() } )。 感谢您的阅读,如果有什么我忘了提的话,请随时在评论部分询问我。 最后〜编码愉快〜🙂