闭包在开发中那是相当常见,但其奇特的长相对初学者并不十分友好,现在我们就来看看闭包到底是个什么东西,可以怎么用?
let a:Int -> Int let b:Int -> Int func squareFun(x: Int) -> Int { return x*x } a = squareFun b = {(x: Int) -> Int in return x*x}
就像上面的实例代码,我们先定义了变量a,b是一个通过一个Int型值返回另一个Int型值的函数,然后把函数squareFun赋给a,而b则是以闭包的写法赋值,其效果是一样的。
当我们使用闭包语法的时候,不需要指定参数类型和返回值类型,因为闭包语法会自动判断。
b = {x in return x*x}
甚至,我们可以省略关键字return:
b = {x in x*x}
还能再简单吗?当然可以!就是这么逆天!
b = {$0 * $0}
$0表示第一个传过来的参数,$1表示第二个。。。以此类推,就像这样:
let a:(Int,Int) -> Int a = {$0 + $1} print(a(3,2))
真是太简单了!
数组有一个方法是以函数为参数的:map
let array = [1,2,3] let a:Int -> Int a = {$0 + 2} let result = array.map(a) print(result)
map返回一个包含自身映射变换后的数组。注意到没有?每次我们都要先定义一个变量表示函数,再定义闭包,其实,立即!马上!立刻!使用闭包的情况,我们是不需要定义这个变量的:
let array = [1,2,3] let result = array.map({$0 + 2}) print(result)