一、闭包

二、闭包作为函数参数

1、尾随闭包

定义:

  • 当函数的最后一个参数是函数时,在函数调用时可以把闭包表达式写在()外面
  • 尾随闭包是一个书写在函数括号之后的闭包表达式

  • 2、逃逸闭包

    定义:

  • 如果一个闭包被作为一个函数的参数,并且在函数执行完之后才被执行,那么这种情况下的闭包就被称为逃逸闭包

  • 在参数名的:后面用@escaping来修饰说明逃逸闭包

3、自动闭包

定义:

  • 在参数名的:后面用@autoclosure来修饰说明自动闭包
  • @autoclosure会自动将20封装成闭包{20}
  • @autoclosure只支持() -> T格式的参数
  • @autoclosure并非只支持最后1个参数
  • 有@autoclosure和无@autoclosure构成了函数重载
  • 空合并运算符??使用了@autoclosure技术 ```objectivec func getFirstPositive( a: Int, b: @autoclosure () -> Int) -> Int { return a > 0 ? a : b() }

getFirstPositive(1, 10) ```

三、闭包对变量的捕获