1.闭包表达式
在swift中,我们可以通过func来定义一个函数,也可以用闭包表达式定义一个函数。
{
(函数列表) -> 返回值类型 in
函数体代码
}例子:
var fn = {(v1: Int, v2: Int) -> Int in v1 + v2}
print(fn(2,3))2.闭包表达式简写
例子:
func sum(_ v1: Int, _ v2: Int, fn:(Int,Int)->Int){
print(fn(v1,v2))
}
sum(1, 2, fn: {(v1:Int,v2:Int)->Int in return v1 + v2})
sum(2, 3) { (v1, v2) -> Int in
v1 + v2
}
sum(3, 4, fn: {$0 + $1})
sum(4, 5){$0 + $1}3.尾随闭包
如果将一个很长的闭包表达式作为函数的最后一个实参,使用尾随闭包可以增强函数的可读性。即可以把大括号抽出来,放到后面。
例子:
func sum(_ v1: Int, _ v2: Int, fn:(Int,Int)->Int){
print(fn(v1,v2))
}
sum(4, 5){$0 + $1}如果闭包表达式是唯一实参,则可以不写括号。
例子:
func sum(fn: (Int,Int) -> Int) {
print(fn(1,2))
}
sum{$0 + $1}4.闭包
一个函数和它所捕获的变量\常量环境组合起来,称为闭包。一般定义在函数内部的函数,并且会捕获函数的局部变量或常量。
例子:
func getFn2() -> (Int) -> Int {
var num = 0
func sum(i: Int) -> Int{
num += i
return num
}
return sum
}
print(getFn2()(2))5.自动闭包
swift使用 @autoclosure 来描述自动闭包,使用自动闭包可以让函数更加简洁,只支持()-> T 格式,空合运算符??就是使用 @autoclosure 技术。
例子:
func text(v1: Int, v2: ()-> Int) -> Int {
return v1 > 0 ? v1 : v2()
}
text(v1: 2, v2: {5})
func text(v1: Int, v2: @autoclosure ()-> Int) -> Int {
return v1 > 0 ? v1 : v2()
}
text(v1: 2, v2: 5)上一篇文章:swift从入门到精通06-结构体和类
下一篇文章:swift从入门到精通08-属性