闭包@escaping

112 阅读1分钟

非逃逸闭包、逃逸闭包,一般都是当做参数传递给函数 

非逃逸闭包:闭包调用发生在函数结束前,闭包调用在函数作用域内 

逃逸闭包:闭包有可能在函数结束后调用,闭包调用逃离了函数的作用域,需要通过@escaping声明

不允许补获 inout输入输出 参数

1、闭包表达式

在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数

{(参数列表)-> 返回值类型 in
    函数体代码
}

尾随闭包

如果将一个很长的闭包表达式作为函数的最后一个实参,使用尾随闭包可以增强函数的可读性 口尾随闭包是—个被书写在函数调用括号外面(后面)的闭包表达式

定义闭包表达式

var fun:(Int,Int)->Int = {0+0+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()

自动闭包

可以延迟执行,提高性能不一定执行