从函数到闭包
首先来定义一个简单的函数
这里用一个常量来指向函数,闭包其实就是一个变量或者常量来指向闭包(block)
闭包的语法格式
形参,返回值,代码都包含在{ }中
形参不能包含外部参数。in关键字分隔函数定义与实现代码
代码一:
//定义无参数,无返回值的闭包,都省略,只有代码实现
var block1 = {
print("hhh")
}
//执行闭包
block1()
代码2:
//定义有参数,有返回值的闭包
let block2 = { (x:Int,y:Int) ->Int in
return x + y
}
//执行闭包
block2(11,22)
尾随闭包
闭包作为函数的最后一个参数,函数的括号可以提前关闭,最后是一个闭包{ }
闭包回调
常用于异步回调,代替block回调
无参数无返回值回调:
func block3(finish:()->()){
print("异步执行的代码")
finish();
}
block3 {
print("over")
}
有参数回调:
闭包的参数和返回值
1,当闭包作为函数的参数时,如果闭包有参数,那么就是要通过函数调用来闭包来将函数内的值传递给闭包的代码执行(常用于函数的回调)
2,当闭包作为函数的参数时,如果闭包有返回值,那么就是要通过执行闭包,来将闭包的返回值来作为函数的参数(常用于函数的该参数需要计算才能得到的情况)