闭包

逃逸闭包
  • 当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,我们称该闭包从函数中逃逸。当你定义接受闭包作为参数的函数时,你可以在参数名之前标注 @escaping,用来指明这个闭包是允许“逃逸”出这个函数的。

  • 一种能使闭包“逃逸”出函数的方法是,将这个闭包保存在一个函数外部定义的变量中。举个例子,很多启动异步操作的函数接受一个闭包参数作为 completion handler。这类函数会在异步操作开始之后立刻返回,但是闭包直到异步操作结束后才会被调用。在这种情况下,闭包需要“逃逸”出函数,因为闭包需要在函数返回之后被调用

swift闭包

闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。
Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 匿名函数比较相似。
全局函数和嵌套函数其实就是特殊的闭包。

闭包的形式有:
全局函数:有名字但不能捕获任何值。
嵌套函数:有名字,也能捕获封闭函数内的值。
闭包表达式:无名闭包,使用轻量级语法,可以根据上下文环境捕获值。

Swift中的闭包有很多优化的地方:

  • 根据上下文推断参数和返回值类型
  • 从单行表达式闭包中隐式返回(也就是闭包体只有一行代码,可以省略return)
  • 可以使用简化参数名,如$0, $1(从0开始,表示第i个参数…)
  • 提供了尾随闭包语法(Trailing closure syntax)

你可能感兴趣的:(闭包)