Swift 闭包
闭包也是swift这个语言简洁性的体现,就像在oc中block这个灵活,简洁一样,很重要。 闭包就是个匿名函数,看了看在实际的使用中,和oc的block是一样的,像传个值什么的 完全形态差不多就这个样子 let 闭包名字:(传参类型)->返回类型 = {(传参) -> 返回类型 in 执行代码 return 返回值 } 闭包的形式 有三种 1. 全局函数 有名字但不能捕获任何值 2. 嵌套函数 有名字,也能捕获封闭函数值 3. 闭包表达式 无名闭包,使用轻量级语法,可以根据上下文环境捕获值
Swift中的闭包有很多优化的地方:
闭包是引用类型的。 闭包的创建、赋值、调用 闭包表达式语法能够使用常量形式参数、变量形式参数和输入输出形式参数,但不能提供默认值。可变形式参数也能使用,但需要在形式参数列表的最后面使用。元组也可被用来作为形式参数和返回类型。在闭包的中会用到一个关键字in,in 可以看做是一个分割符,他把该闭包的类型和闭包的函数体分开,in前面是该闭包的类型,in后面是具体闭包调用时保存的需要执行的代码。表示该闭包的形式参数类型和返回类型定义已经完成,并且闭包的函数体即将开始执行。这里总结了一下可能用到的几种形式实现闭包的创建、赋值、调用的过程。例子如下: 方式一:利用typealias最完整的创建
//为(_ num1: Int,_ num2: Int) -> (Int) 类型的闭包定义别名:Add typealias Add = (_ num1: Int,_ num2: Int) -> (Int) //创建一个 Add 类型的闭包常量:addCloser1 let addCloser1: Add //为已经创建好的常量 addCloser1 赋值 addCloser1 = { (_ num1: Int,_ num2: Int) -> (Int) in returnnum1 + num2 } //调用闭包并接受返回值 let result = addCloser1(20,10) 形式二:闭包类型申明和变量的创建合并在一起
//创建一个 (_ num1: Int,_ num2: Int) -> (Int) 类型的闭包常量:addCloser1 let addCloser1: (_ num1: Int,_ num2: Int) -> (Int) //为已经创建好的常量 addCloser1 赋值 addCloser1 = { (_ num1: Int,_ num2: Int) -> (Int) in returnnum1 + num2 } //调用闭包并接受返回值 let result = addCloser1(20,宋体; line-height:25.2px"> 形式三:省略闭包接收的形参、省略闭包体中返回值 |