Swift——7、闭包

闭包

  • 在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数

闭包表达式

定义函数
定义闭包
  • 两者的不同,函数要是想省略参数标签,必须要写 “_”, 但是闭包可以不写

闭包表达式的简写

  • 第二个函数 fn完全可以写成一个sum函数,因为闭包也能表达函数
简写
  • 更魔鬼的写法,0、1分别代表的就是v1和v2
魔鬼写法

尾随闭包

  • 如果将一个很长的闭包表达式作为函数的最后一个实参,使用尾随闭包可以增强函数的可读性
  • 尾随闭包是一个被书写在函数调用括号外面的闭包表达式
尾随闭包1
  • 如果闭包表达式是函数的唯一实参,而且使用了尾随闭包的语法,那么就不需要在函数名后面写圆括号
尾随闭包2

数组的排序

  • 在Swift中数组的排序,直接调用sort函数即可
内部实现
Demo

使用闭包表达式来排序

图片.png

忽略参数

  • 闭包表达式和函数一样能够忽略参数, 在Swift中忽略参数可以用下划线"_”代替
忽略参数

闭包

  • 网上有各种关于闭包的定义,个人觉得比较严谨的定义是
    • 一个函数和它所捕获的常量/变量环境组合起来,称为闭包
  • 一般指定义在函数内部的函数
  • 一般它捕获的是外层函数的局部变量\常量
图片.png
  • plus是内部函数 num 既是函数捕获的变量,下面的写法和上面等价
同上
  • 可以把闭包想象成是一个类的实例对象
  • 内存在堆空间
  • 捕获的局部变量、常量就是对象的成员(存储属性)
  • 组成闭包的函数就是类内部定义的方法

num就是捕获的局部变量 plus就是类内部定义的方法

闭包

注意

  • 如果返回值是函数类型,那么参数的修饰要保持统一,下面参数都是inout类型
类型一致

自动闭包

Demo
  • 上面的Demo,会进行两次运算,分别执行第一个,和第二个。
  • 使用自动闭包 @autoclosure,如果第一个代码成立,则直接结束,不会执行第二个
  • @autoclosure 会自动将20 封装成闭包{20}
  • @autoclosure 只支持()-> T格式的参数
  • @autoclosure 并非只支持最后一个参数
  • 空合并预算福 ?? 使用了@autoclosure 技术
  • @autoclosure@autoclosure 构成了函数重载
  • 使用了@autoclosure的值,会延迟执行
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 每日一句: 精彩的人生总有精彩的理由,笑到最后的才会笑得最甜! 一、定义 闭包是自包含函数代码块,可以在代码中传递...
    雨亦有种执着阅读 286评论 0 0
  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
    Andy_Ron阅读 439评论 0 1
  • 级别: ★☆☆☆☆标签:「iOS」「Swift 5.1」「闭包」「逃逸闭包」「尾随闭包」作者: 沐灵洛审校: Qi...
    QiShare阅读 792评论 0 5
  • Closures:闭包 闭包是独立的函数块,可以在代码中传递和使用。Swift中的闭包类似于C和Objective...
    沐灵洛阅读 459评论 0 2
  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
    CoderLGL阅读 281评论 0 0