swift闭包新手详解(新手必看)

闭包的含义

      闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数比较相似。

     闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。 Swift 会为你管理在捕获过程中涉及到的所有内存操作。

闭包的主要优化

  • 利用上下文推断参数和返回值类型
  • 隐式返回单表达式闭包,即单表达式闭包可以省略 return 关键字
  • 参数名称缩写
  • 尾随闭包语法

闭包的应用场景

    闭包和block的应用场景是一样的.(当你觉得这种情况在oc中用block能实现的,那么在swift中用闭包也能实现)

   1,异步执行完成回调.

   2,控制器间回调

   3,自定义视图回调

闭包的三种模式

闭包有三种形式,1,没有参数没有返回值的闭包(最简单的闭包)

这里有一点需要注意的,一定要去执行调用闭包,否则里边代码不会执行

2,带参数没有返回值的闭包

3,带参数带返回值的闭包

这里要注意的是,返回值需要进行操作,不然会报警告.

注意!

in      去区分去分割函数的定义和实现,说通俗点就是分割 传参和后续操作的分割!!!

闭包回调

闭包回调,也就是说将闭包以参数的形式进行回调.

这里需要注意的是,swift中的GCD和oc中的GCD不同.

尾随闭包

尾随闭包是调比较简洁的写法

这里需要注意的是,"大多数",一般的闭包系统会自动帮我们做到尾随闭包, 并不是所有,例如上边GCD嵌套中.

 

那么我们根据上边尾随闭包的含义来对它进行修改.

把该回调的最后一个形参以及最外层的小括号删除即可.

逃逸闭包

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

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

var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
    completionHandlers.append(completionHandler)
}

 

新手分享,不喜勿喷!!!求分享,求扩散.求转发.

原文地址:https://www.cnblogs.com/baxiu/p/8081617.html