您的位置:首页 > 移动开发 > Swift

Swift 第五课 闭包

2015-09-16 17:42 281 查看
Swift 中的闭包与C和 Objective-C 中的Blocks以及其他一些编程语言中的lambdas比较相似。

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

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

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

闭包例子: 使用Swift 提供的函数,sort 为例展示闭包语法优化的方式。 func sort<T>(inout array: [T], isOrderedBefore: (T, T)
-> 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可以根据上下文推测出
//        // firstCount和lastCount的类型会是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, <)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息