如果一个函数接受别的函数作为参数 ,或者一个函数的返回值是函数,那么这样的函数就叫做高阶函数 (higher-order function)
Swift 为我们提供很多高级函数,这也从另一方面说明了swift 比 Objective-C 高级之处
- map—对集合中的元素进行变换
- flatMap—如何对元素进行变换,并且可以过滤元素
- filter—元素是否应该被包含在结果中
- reduce—如何将元素合并到一个总和的值中
其他函数
- forEach—对于一个元素,应该执行怎样的操作
- sort—对数组进行排序,数组内元素可以为数字,也可以为字符串
- min和max—两个元素中的最小/最大值是哪个
map
map 可以对一个集合类型的所有元素做一次映射操作
Emoji 示意:
解释:“牛、土豆、鸡、玉米” –> map –> “汉堡、薯条、鸡腿、爆米花”
数组中的“牛、土豆、鸡、玉米” 经过 map() 函数中的“火”进行变换产生 “汉堡、薯条、鸡腿、爆米花”
所以map的作用是对每一个元素进行变换
map 具体代码演示:
flapMap
flapMap拥有map的功能,通过支持更多功能
flapMap 可以过滤掉返回结果为 nil 的元素
flapMap 可以将二维数据转换成一维的
Emoji 示意:
参考资料:谈谈 Swift 中的 map 和 flatMap
flatMap 具体代码演示:
filter
通过条件对集合中的元素进行过滤
Emoji 示意:
解释:数组中的食物经过 filter() 函数中的 “小孩” 条件进行筛选,选择出小孩喜欢的食物
filter 具体代码演示:
reduce
把数组元素组合计算为一个值
表达式:
reduce(initial: U, combine: (U, T) -> U) -> U
Emoji 示意:
解释:食物通过 reduce() ,饥饿的表情把每一个食物吃掉,变成开新的表情
reduce()中第一个参数是初始值,返回结果为最终值
其他函数
forEach
遍历集合中每一个元素
// forEach 代替 for 循环
var names = ["Mazy","Lucy","Lily","Vivian"]
names.forEach { (name) in
print(name)
}
sort/sorted
对集合中的元素进行排序,包含数组和字符串
let someNum = [3,6,54,6785,34,697,23,8]
let sortResult = someNum.sorted(by: {$0 < $1})
sortResult // [3, 6, 8, 23, 34, 54, 697, 6785]
let array = ["Mazy","Lucy","Lily","Vivian","Allen","Xxx"]
let sorted = array.sorted(by: {$0 < $1})
sorted // ["Allen", "Lily", "Lucy", "Mazy", "Vivian", "Xxx"]
min/max
获取集合中两个或多个元素的最大值或最小值
let min1 = min(888, 66) // 66
let min2 = min(6, 1, 8, 38) // 1
let max1 = max(8, 6) // 8
let max2 = max(32,43,57,99) // 99