Swift iOS访谈:关于闭包和功能的所有信息

函数: 函数执行特定任务的自包含代码块。

功能具有三种类型。

全局功能:具有名称,但不捕获值。

嵌套函数:具有名称和捕获值

闭包:(函数的特殊类型)没有名称,但可以获取值

########################################

闭包 :闭包是自包含的功能块 ,可以在代码中传递和使用。

闭包可以从定义闭包的周围环境捕获任何常量和变量的引用

闭包类似于lambda和block

########################################

转义闭包:将闭包传递给函数但在函数返回后调用。

闭包可以转义的一种方法是将其存储在函数外部定义的变量中。

########################################

非转义闭包:当闭包传递给函数但在函数返回之前调用。

默认情况下,非转义关闭是关闭类型。

在非转义中,我们可以使用self,因为闭包是在函数返回之前执行的,因此self肯定会存在。

########################################

自动闭包:自动闭包是一种闭包,它是自动创建的,用于包装作为参数传递给函数的表达式。

调用时不接受任何参数,返回包装在其中的expression的值。

  func f(pred:@autoclosure()-> Bool){ 
  如果pred(){ 
  打印(“这是真的”) 
  } 
  } 
  f(pred:2> 1) //真 

########################################

尾随闭包:如果需要将长闭包表达式作为最终参数传递给函数,则建议将其作为尾随闭包传递。

在函数调用的括号后面写上结尾的闭包,即使它仍然是函数的参数。

  func sum(从:Int,到:Int,闭包:(Int)->(Int))-> Int { 
  var sum = 0 
  因为我从…到{ 
 总和==闭包(i) 
  } 
  返还金额 
  } 
  //正常关闭通话 
  sum(从:0,到:5,闭包:{ 
  $ 0 * 10 
  }) //输出:150 
  // 尾随闭幕电话 
  sum(从0到5){ 
  $ 0 * 10 
  } //输出:150 

########################################

捕获值:闭包可以从定义它的周围环境中捕获常量和变量

然后,闭包可以从其主体内部引用和修改这些常量和变量的值,即使定义常量和变量的原始范围不再存在。

########################################

捕获列表:通过将捕获列表定义为闭包的定义的一部分, 解决闭包与类实例之间的强烈引用循环

Swift使用捕获列表来打破这些强大的参考周期。

########################################