1.闭包定义
swift语言中可以使用一块独立的代码块替代函数的定义称独立的代码块为闭包
//闭包的格式:
func sumAAndB(a: Int,b: Int) ->Int {
return a + b
}
print(sumAAndB(10, b: 20))
//<1>使用闭包实现两个数的和
var sum: (Int,Int)->Int = {(a: Int,b: Int)->Intin
return a + b
}
//[注意]闭包不调用和没有定义是一样的里面的语句块永远不会执行
2.闭包的简化(closure)
//<1>当执行语句只有一个表达式的时候 return关键字可以缺省
var closure1 = {(a: Int,b: Int) -> Intin
a > b ? a : b
}
print(closure1(10,20))
sortArr(&array123, method: {(a: Int,b: Int)->Boolin
a > b
})
print(array123)
//<2>当执行语句只有一个表达式而且表达式的结果类型可以推断出来那么return关键字和返回值类型可以同时缺省
var closure2 = {(a: Int,b: Int) in
a > b ? a : b
}
print(closure2(100,10000))
sortArr(&array123, method: {(a: Int,b: Int) in
a < b })
print(array123)
//<3>当参数的类型已知并且满足上面<2>的条件参数的名称可以缺省参数的类型可以缺省返回值类型可以缺省 return关键字可以缺省 in也缺省
var closure3: (Int,Int)->Int = {$0 > $1 ? $0 : $1}
print(closure3(-100,0))
sortArr(&array123, method: {$0 > $1})
print(array123)
//<4>当参数个数为两个并且满足<3>的条件闭包中直接添加运算符号就可以
sortArr(&array123, method: <)
print(array123)
3.尾随闭包
//当函数最后一个形参是函数类型的变量时对函数类型的变量赋值时需要使用闭包那么闭包传值的书写位置可以放在所有参数列表之外不放在参数列表的最后位置 我们称这种写法为尾随闭包
//定义函数实现两个数的和和差
func SumAndSub(a: Int,b: Int,method: (Int,Int)->Int) {
print(method(a,b))
}
SumAndSub(10, b: 20, method: {(a: Int,b: Int)->Intin
return a + b
})
SumAndSub(100, b: 200, method: -)
SumAndSub(0, b: 10){$0 - $1}