swift 闭包
闭包这个东西,一听就觉得逼格很高,本篇博客来讨论swift中的闭包。 闭包的定义是:巴拉巴拉,吼喽吼喽,OOXX。。。。。。,这就是闭包的定义。 其实,闭包就类似于其它语言中的lambda表达式,其本质就是一个匿名函数,作用有两个:
本篇以数组的sortInPlace方法为切入点,一步一步地介绍闭包是如何简化代码(并装逼)的。 注:数组的sort方法返回一个排序好的新数组,原来的数组不发生变化,而sortInPlace方法是直接修改原来的数组。 不使用闭包数组有一个sortInPlace()方法,可以将这个数组从小到大排列,例如: var intArray=[8,2,4,3,6] intArray.sortInPlace()
此时数组为 func compare(num1 :Int,num2 :Int)->Bool{
return num1 >= num2
}
intArray.sortInPlace(compare)
此时数组为 使用闭包表达式我在上面已经提过了,闭包的本质就是匿名函数,接下来我们就使用闭包来调用sortInPlace方法 使用一般形式的闭包表达式闭包表达式的一般形式是这样的: {(parameter s) -> returnType in
statements
}
那么,下面就来用一般形式创建一个闭包并传递给sortInPlace方法 intArray.sortInPlace({(num1:Int,num2 :Int) ->Bool in return num1 >= num2 })
闭包的函数体部分由关键字 in引入。该关键字表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始。 intArray.sortInPlace({(num1:Int,num2 :Int) ->Bool in return num1 >= num2 })
简化参数类型和返回值类型由于swift的类型推断机制,闭包可以省去参数的类型和返回值的类型,简化之后,代码如下: intArray.sortInPlace({(num1,num2) in return num1 >= num2 })
单行表达式闭包可以省略return如果闭包内的函数体只包含一行代码,就可以省略return关键字。简化之后,代码如下: intArray.sortInPlace({(num1,num2) in num1 >= num2 })
参数名简写Swift自动为内联函数提供了参数名称简写功能,我们可以直接通过 intArray.sortInPlace({$0 >= $1})
对于很多闭包来说,到这一步就已经是最精(zhuang)简(bi)的了,但对于本例中的闭包来说,还有更更精简的方式,就是直接使用swift提供的运算符函数。 运算符函数swift中定义了>=这个运算符 public func >= (lhs: Int,rhs: Int) -> Bool
它的类型正好是我们的sortInPlace需要的类型,所以,我们可以将这个闭包简化为: intArray.sortInPlace(>=)
Trailing 闭包闭包还有一种形式,叫做Trailing闭包它的用途是:当一个很长的闭包作为一个函数的最后一个参数时,可以将该闭包写在参数所在的括号外面。如果我说的不是很明白,那么看代码 intArray.sortInPlace(){
return $0 >= $1
}
花括号在小括号外面,明白了吧。这样使用的话,闭包必须是函数的最后一个参数。 intArray.sortInPlace {
return $0 >= $1
}
关于闭包的使用就介绍到这里,闭包的语法非常灵活,语法糖也很甜,具体如何使用,就由你们自由发挥了! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |