zoukankan      html  css  js  c++  java
  • 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)
    }
    

     

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

  • 相关阅读:
    帮Netpole Review了一下RichEditor控件
    WawaKMv1命名空间.rtf
    WawaKMV1需求变更.rtf
    WawaKMV1技术难点.rtf
    WawaKMV1工具栏设计.rtf
    通讯录相关需求分析
    WawaKMV1Urtal Recall分析.rtf
    WawaKM:关于批量抓图的需求分析及设计
    图片相关的需求分析
    蛙蛙郑重推荐您使用firefox浏览器
  • 原文地址:https://www.cnblogs.com/baxiu/p/8081617.html
Copyright © 2011-2022 走看看