Swift-13:高阶函数

作者: 恍然如梦_b700 | 来源:发表于2021-04-12 00:09 被阅读0次

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

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

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

    map函数

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

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


    image.png

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

    image.png

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

    flatMap函数

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


    image.png

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

    compactMap函数

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


    image.png

    filter函数

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

    forEach

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


    image.png

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

    reduce

    源码:


    image.png

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


    image.png

    相关文章

      网友评论

        本文标题:Swift-13:高阶函数

        本文链接:https://www.haomeiwen.com/subject/atkekltx.html