Swift闭包实现

Closure也即闭包是Swift中的一个让人难以理解的地方。想要理解它可以从实例入手。

在从前一篇文章中提到过,函数是一等公民,可以作为参数传入传出。闭包可以说是一个不让你知道名字的函数,函数则是闭包的一种特例。

代码截图如下:

Swift Closure ShowClosure

首先ShowClosure0是一个函数,返回类型为一个闭包,其内部就是对result的赋值。result定义为闭包,输入两个Int类型,返回Bool类型,其作用是比较两个数的大小,若a<b则返回true,否则返回false。接着对result进行赋值,实现闭包。通常闭包的语法为:

   {      (parameters)->[tpye] in
          return [something]
   }

如果要使用闭包,那就需要将闭包传入需要闭包的函数中。这里我用sort举例。

先定义example,类型为Int数组,值为[1,5,6,3,8],接着用sort()进行排序。

这里可以将ShowClosure0直接传入sort()中。

Swift Closure Examples

另外也可以对闭包进行一系列的简化。例如在ShowClosure0中较为复杂,在ShowClosure1中可以依靠Swift的类型推断将a,b的类型隐去。也即从使用的数组的元素类型中推断出a,b的类型。接着如果闭包只有一条语句,那么可以省略return。闭包就变成了:

   (a,b) in
   a<b

最后使用简写参数名,将一长串的闭包转化为{$0<$1}。

是不是很神奇呢,然而机智的Swift可以让你更省力,直接用一个<就可以解决。非常方便,从长长的一段变成一个运算符。如果要降序就用>,升序就用<。

源码位于Github,下载方法:

   git clone https://github.com/Vayne-Lover/Swift-Closure