Swift-13:高阶函数

时间:2021-6-7 作者:qvyue

高阶函数的本质也是函数,有两个特点

    1. 接受函数或者闭包作为参数
    1. 返回值是一个函数或者是闭包

这些函数我们通常用于Array,Set,Dictionary中的每一个元素
高阶函数我们大部分都用过,这里我就不介绍具体如何使用了,我只介绍源码是如何实现的

map函数

Map函数作用于Collection中的每一个元素,然后返回一个新的Collection。

假设我们有一个String类型的Array,现在我们对集合当中的每一个元素都是小写的。一般我们的代码会怎么写呢?我们看看通过高阶函数如何实现:

Swift-13:高阶函数
image.png

我们接下来看看底层是如何实现的

Swift-13:高阶函数
image.png

可以看到,首先创建一个新的数组,(通过迭代器) 对集合中每一个元素执行transform闭包操作,然后返回新的集合。

flatMap函数

flatMap会将二维数组压平为一位数组
[[element],[element],[element]] -> [element]

Swift-13:高阶函数
image.png

相比较我们的 map 来说, flatMap 最主要的两个作用一个是 压平,一个是过滤空值。

compactMap函数

本质将集合的数据做了一个可选只绑定的操作,返回的结果是非可选值。

Swift-13:高阶函数
image.png

filter函数

filter就是Sequence中默认提供的方法,允许调用者传入一个闭包来过滤集合中的元素

Swift-13:高阶函数
image.png

forEach

对于集合类型的元素,有时候不必要每次都通过for循环来去做遍历,Sequence同样提供了高阶函数来公供我们使用

Swift-13:高阶函数
image.png

源码很简单,就是for in语法糖。

reduce

源码:

Swift-13:高阶函数
image.png

给定一个初值,将集合中的元素依次和初值进行transform操作,得到返回值再进行transform操作,不断的累加
看着可能不是很好理解,接下来我举个例子
我们可以使用 reduce 函数合并集合中所有元素创建一个新值。比如

Swift-13:高阶函数
image.png
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。