Swift iOS访谈:关于闭包和功能的所有信息
函数: 函数是执行特定任务的自包含代码块。
功能具有三种类型。
全局功能:具有名称,但不捕获值。
嵌套函数:具有名称和捕获值
闭包:(函数的特殊类型)没有名称,但可以获取值
########################################
闭包 :闭包是自包含的功能块 ,可以在代码中传递和使用。
闭包可以从定义闭包的周围环境中捕获任何常量和变量的引用 。
闭包类似于lambda和block
########################################
转义闭包:将闭包传递给函数但在函数返回后调用。
闭包可以转义的一种方法是将其存储在函数外部定义的变量中。
########################################
非转义闭包:当闭包传递给函数但在函数返回之前调用。
默认情况下,非转义关闭是关闭类型。
在非转义中,我们可以使用self,因为闭包是在函数返回之前执行的,因此self肯定会存在。
########################################
自动闭包:自动闭包是一种闭包,它是自动创建的,用于包装作为参数传递给函数的表达式。
调用时它不接受任何参数,但返回包装在其中的expression的值。
func f(pred:@autoclosure()-> Bool){
如果pred(){
打印(“这是真的”)
}
}
f(pred:2> 1) //真
########################################
尾随闭包:如果需要将长闭包表达式作为最终参数传递给函数,则建议将其作为尾随闭包传递。
在函数调用的括号后面写上结尾的闭包,即使它仍然是函数的参数。
func sum(从:Int,到:Int,闭包:(Int)->(Int))-> Int {
var sum = 0
因为我从…到{
总和==闭包(i)
}
返还金额
}
//正常关闭通话
sum(从:0,到:5,闭包:{
$ 0 * 10
}) //输出:150
// 尾随闭幕电话
sum(从0到5){
$ 0 * 10
} //输出:150
########################################
捕获值:闭包可以从定义它的周围环境中捕获常量和变量 。
然后,闭包可以从其主体内部引用和修改这些常量和变量的值,即使定义常量和变量的原始范围不再存在。
########################################
捕获列表:通过将捕获列表定义为闭包的定义的一部分, 解决闭包与类实例之间的强烈引用循环 。
Swift使用捕获列表来打破这些强大的参考周期。
########################################