Swift 面试题
目录

Swift 中闭包的语法是什么?

· 约 4 分钟读完 · 第 45 / 196 章

推荐答案

在 Swift 中,闭包的语法如下:

  • parameters:闭包的参数列表,类似于函数的参数列表。
  • ReturnType:闭包的返回值类型。
  • in:关键字,用于分隔闭包的参数和返回值类型与闭包体。
  • statements:闭包体中的代码。

本题详细解读

1. 闭包的基本语法

闭包是 Swift 中的一种自包含的功能块,可以在代码中传递和使用。闭包可以捕获和存储其所在上下文中的常量和变量的引用。闭包的语法与函数非常相似,但闭包可以更简洁地表达。

2. 闭包的简化形式

Swift 提供了多种简化闭包语法的方式:

  • 省略参数类型:如果闭包的参数类型可以从上下文中推断出来,可以省略参数类型。

  • 省略返回类型:如果闭包的返回类型可以从上下文中推断出来,可以省略返回类型。

  • 省略参数列表:如果闭包没有参数,可以省略参数列表。

  • 省略 return 关键字:如果闭包体只有一行代码,并且返回一个值,可以省略 return 关键字。

  • 使用尾随闭包:如果闭包是函数的最后一个参数,可以将闭包写在函数调用的括号外面。

3. 闭包捕获值

闭包可以捕获其所在上下文中的常量和变量,即使这些常量和变量在闭包被调用时已经超出了作用域。

在这个例子中,闭包 incrementer 捕获了 total 和 incrementAmount,即使它们在闭包被调用时已经超出了作用域。

4. 逃逸闭包与非逃逸闭包

  • 非逃逸闭包:默认情况下,闭包是非逃逸的,意味着闭包在函数返回之前必须被执行。

  • 逃逸闭包:如果闭包在函数返回之后才被执行,则称为逃逸闭包。逃逸闭包需要在参数类型前加上 @escaping 关键字。

在这个例子中,completion 闭包在 performAsyncOperation 函数返回之后才被执行,因此需要使用 @escaping 关键字。