Swift-通过 Emoji 来理解 Swift 高阶函数

如果一个函数接受别的函数作为参数 ,或者一个函数的返回值是函数,那么这样的函数就叫做高阶函数 (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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值