闭包能够将较为复杂的功能,传递是这个闭包中的函数以及数据,占用资源比较小。
闭包是封闭的、自包含的代码块。 属于函数的匿名简化版,以下是一个闭包的形式:
{ (形参列表) -> 返回值类型 in
执行体(相当于函数体)
}
闭包表达式与与定义函数的语法相比,有以下区别:
- 删除掉了 func
- 删除掉了函数名
- 在返回值的类型后添加关键字in
- { }移到了形参列表的前边
关于闭包表达式说明
- 不能以一个闭包表达式开始一个顶层语句
- 形参列表中的形参不能有默认值
闭包与普通函数:
1.变量或者常量的值
// 普通函数
func addShow(int1 :Int, int2: Int) {
return int1 + int2
}
// 闭包
let a = {(int1: Int, int2: Int) -> Int in
return int1 + int2
}
2.函数返回值
// 普通函数
func operaShow(flag: Bool) -> (int1: Int,int2: Int) -> Int {
func a(int1: Int, int2: Int){
return int1 + int2
}
func b(int1: Int, int2: Int){
return int1 - int2
}
return flag ? a:b
}
// 闭包
func operaShow(flag: Bool) -> (int1: Int,int2: Int) -> Int {
func flag?{(int1: Int, int2: Int) -> Int in
return int1 + int2
}:{(int1: Int, int2: Int) -> Int in
return int1 - int2
{
}
operaShow(flag:true)(5,4)
operaShow(flag:false)(5,4)