Swift 3中的闭包是什么? (第3部分)

继续第1部分,第2部分,这篇文章将是有关Closures的最后一篇,我们都可以肯定,它可以写成一整本书,只讨论Closures,所以我几乎没有触及任何表面。

这次我要谈的是:

  • 速记参数名称
  • 尾随闭包

速记参数名称

迭代数组的一种方法是使用forEach方法,在以下示例中,该方法将打印其内容:

闭包具有使我们简化代码的功能,而不必通过参数访问其值,而可以使用简写参数名称来访问它们:

您可能会注意到,我们省略了参数名称number甚至省略了关键字in ,并且我们正在通过名称$0访问闭包提供的值,以便减少代码并专注于代码中最重要的部分。

因此,即使闭包有更多的参数,速记名称也将被分配为$0$1$2 ,以此类推。

尾随闭包

假设我们有一个名为findInteger的函数(不用担心该函数的源代码在结尾),它将使用Integer数组根据条件搜索元素:

因此,在上面的代码中,我们希望获得第一个满足关闭条件的数字,即数字服务器。

我们可以看到我们在第二个参数上收到一个闭包表达式,但是有时像在这种情况下那样,表达式变长了,相反,我们可以这样做:

区别在于,首先我们不需要在函数调用中使用参数标签closure

其次,闭包表达式位于函数调用的括号之后,但它仍然是函数的参数。

这种简化方式称为尾随闭合。

让我们来看另一个例子。

这次,我们在Integer的扩展结构中使用了一种称为forEach (末尾的源代码)的方法,该方法将允许我们迭代数字上的数字,如下所示:

该代码本身具有解释性,但是关闭时间较长。

让我们应用一些尾随闭包

因此,在这里作为最后一个示例( findInteger function ),我们没有放置称为closure的参数标签,也没有包含括号。

如果闭包表达式是forEach方法中唯一的参数,那么我们也可以消除函数的调用括号。

当闭包表达式很长时, 尾随的闭包可以解脱

正如我提到的,示例中使用的方法的源代码:

如果您觉得该文章有用,请帮助我建议单击绿色的心形轮廓图标,以便我可以继续创建更多文章,非常感谢!

我要亲自感谢Bob和Victor激励我与我们的iOS社区分享我的Swift故事。

感谢您阅读我!