Swift 第五课 闭包

Swift 中的闭包与C和 Objective-C 中的Blocks以及其他一些编程语言中的lambdas比较相似。

闭包可以捕获和存储其所在上下稳重任意常量和变量的引用,就是所谓的闭合并包裹着这些常量和变量,俗称闭包,Swift会管理捕获过程中涉及到的内存操作。

Swift函数,实际上也是特殊的闭包。


Swift闭包表达式风格简洁,在常见场景中可以实现语法优化:可以利用上下文,推断出参数和返回值的类型,可以省略return关键字。参数名称可以简写。


闭包例子: 使用Swift 提供的函数,sort 为例展示闭包语法优化的方式。 func sort<T>(inout array: [T], isOrderedBefore: (TT) -> Bool) 第一个参数是一个数组,第二个参数是一个闭包。

let maxs = [1,2,12,123,43,43,64,63]


第一种方式,实现。

func backwards(firstCount:Int, lastCount: Int) ->Bool {

        return firstCount > lastCount

 }

sort(&maxs, backwards) //第二个参数,传入函数,函数也是特殊的闭包。


//        // 第二种方式:使用闭包方式

//        // 完整闭包写法是在花括号内有参数列表和返回值,用关键字in表明闭包体的开始

//        // (firstCount: Int, lastCount: Int) 闭包参数列表

//        // -> Bool 指明闭包返回值类型是Bool

//        // in关键字表明闭包体的开始

 sort(&maxs, { (firstCount:Int, lastCount: Int) ->Bool in  return firstCount < lastCount   })


//        // 下面再进一步简化写法:根据环境上下文自动推断出类型 // 参数列表都没有指明类型,也没有指明返回值类型,这是因为swift可以根据上下文推测出

//        // firstCountlastCount的类型会是maxs数组元素的可以省略return关键字类型,而返回值类型会根据return语句结果得到

        sort(&maxs, { firstCount, lastCountin return firstCount < lastCount})


//        // 再进一步简化:隐式返回(单行语句闭包)因为闭包体只有一行代码,可以省略return

        sort(&maxs, { firstCount, lastCountin firstCount > lastCount})

//        // 再进一步简化:使用简化参数名($i,i=0,1,2...0开始的)

        sort(&maxs, {$1, $2 in $0 > $1 })


//   在进一步简化:        // Swift会推断出闭包需要两个参数,类型与maxs数组元素相同  

        sort(&maxs, { $0 > $1 })

//        // 最简单的写法:使用操作符  

        sort(&maxs, <)






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值