多语言展示
当前在线:641今日阅读:103今日分享:49

Swift 功能编程浅析

介绍了Swift下功能编程的简单例子,从而掌握功能编程的方法。
工具/原料
1

Swift

2

Xcode Playground

Map
1

映射  一一对应的关系,根据输入一一映射为输出要求计算一个数组中各数的平方

2

// 常规的方法:使用一个循环,进行计算,很直观的方法let values = [2.0, 4.0, 5.0, 7.0]var squares : [Double] = []for value in values {  squares.append(value*value)}

3

// 使用闭包完整的方法// 将闭包传送给map函数,该闭包是一个计算平方值的函数,输入一个参数,返回改参数的平方let squares = values.map({  (value : Double) -> Double in  return value*value})

4

// 简化闭包的写法// 最后一个参数是闭包时,可以简化let squares = values.map {value in value*value}

5

// 最简化的写法// 对于闭包的参数可以使用$0 (第一个参数),$1(第二个参数)... 的方式let squares = values.map({ $0 * $0})

6

map还可以用于数组(array)以外的其他集合类型,比如字典(dictionary):let values = ['value1' : 2.0, 'value2' : 4.0, 'value3' : 5.0, 'value4' : 7.0]let squares = values.map { $1 * $1 }

Filter
1

过滤返回满足条件的集合要求返回所有偶数

2

代码:let values = [1,3,4,6,10,12,15]let even = values.filter { $0 % 2 == 0 }其返回值为:[4,6,10,12]可以看出,如果使用常规循环的方式,本方法简单了很多。

Reduce
1

缩减合并所有元素,返回一个值

2

示例1:计算一个数组中所有数之和let values = [1,2,3,4,5,6,7,8,9,10]// 两个参数,第一个是初始值,第二个是操作符let total = values4.reduce(5, +)最后,total的结果是60(55 加上初始值5)

3

第二个参数也可以是一个闭包(此闭包包括两个参数),可用来定义自己的方法示例2:在每个元素前加一个“,”号// 完整闭包的写法let values5 = ['a','b','c']let result = values5.reduce('', { initial , value in  return '\(initial),\(value)'})// 简化写法let result2 = values5.reduce('') { '\($0),\($1)' }最后的结果是:,a,b,c

Flatmap

映射合并 把多层集合合并成一个集合,由于比较简单,略去示例

Chaining
1

链式操作 可以把以上各操作链接起来,就是说把一个操作的结果作为另一个操作的输入

2

示例:计算奇数的和let values = [1,2,3,4,5,6,7,8,9,10]let result = values.filter{$0 % 2 != 0}.reduce(0, +)最后的结果是:25

3

在Playground中

推荐信息