非逃逸闭包、逃逸闭包,一般都是当做参数传递给函数
非逃逸闭包:闭包调用发生在函数结束前,闭包调用在函数作用域内
逃逸闭包:闭包有可能在函数结束后调用,闭包调用逃离了函数的作用域,需要通过@escaping声明
不允许补获 inout输入输出 参数
1、闭包表达式
在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数
{(参数列表)-> 返回值类型 in
函数体代码
}
尾随闭包
如果将一个很长的闭包表达式作为函数的最后一个实参,使用尾随闭包可以增强函数的可读性 口尾随闭包是—个被书写在函数调用括号外面(后面)的闭包表达式
定义闭包表达式
var fun:(Int,Int)->Int = {1}
闭包
网上有各种关于闭包的定义,个人觉得比较严谨的定义是
一个函数和它所捕获的变量\常量环境组合起来,称为闭包
一般指定义在函数內部的函数
一般它捕获的是外层函数的局部变量\常量
可以把闭包想象成是一个类的实例对象
内存在堆空间
口捕获的局部变量\常量就是对象的成员(存储属性)
组成闭包的函数就是类内部定义的方法
typealias Fn = (Int)->Int
func getFn() -> Fn {
var num = 0
func plus(_ i:Int) -> Int {
num +=1
return num
}
return plus
}
var fn = getFn()
自动闭包
可以延迟执行,提高性能不一定执行