所谓闭包就是封闭的、自包含的代码块。 属于函数的匿名简化版,以下是一个闭包的形式:
{ (形参列表) ->返回值类型 in
执行体(相当于函数体)
}
闭包表达式与与定义函数的语法相比,有以下区别:
1. 删除掉了 func
2. 删除掉了函数名
3. 在返回值的类型后添加关键字in
4. { }移到了形参列表的前边
关于闭包表达式说明说明
1. 不能以一个闭包表达式开始一个顶层语句
2. 形参列表中的形参不能有默认值
闭包表达式作为
1.变量或者常量的值
2.函数的实参
3.函数的返回值
如果闭包表达式执行体只有一行return语句,那么可以省略return
swift可以推算出返回值类型和形参类型
1.因此可以省略形参的类型和形参列表的:和()
2. 省略 -> 和返回值的类型
在闭包表达式在省略形参和返回值的情况下,还可以省略形参名和关键字in,这样可以在执行体中通过$0 $1来引用第一个和第二个形参
swift对基本数据类型间的比较运算符定义了一种特定于string类型的实现,可以将基本数据类型间的比较运算符作为一种函数,其函数类型;(String,String)->Bool . 因此,可以将基本数据类型的比较运算符直接作为字符串数组的sorted方法参数
尾随闭包: 用于执行体比较长的函数, 在调用函数时,如果最后一个实参是闭包表达式, 可以将其写在()的外边和后边,这种写法称为尾随闭包, 使用尾随闭包,必须去掉形参标签
自动闭包 :如果闭包表达式在花括号里,swift会自动创建一个表达式, 该表达式没有任何参数,并且返回值就是该表达式。这样的表达式称为自动闭包。