Swift 中被忽略的函数编程

版权声明:转载请标注原文地址。邮箱[email protected] https://blog.csdn.net/Xoxo_x/article/details/80793447

简书:https://www.jianshu.com/u/9ed95c561b48
filter : 筛选,过滤滤,本意是过滤的意思
map : 映射,会遍历拷贝一份闭包里面的东西
forEach : 遍历
split : 分割,针对某一特定值进行分割,分成为两个数组
reduce : 归纳,这个 ······

sort : 排序,排序的方式决定闭包的内容

这些函数在编程中,会起到意想不到的作用


【情形如下:】

从下列名单中筛选出名字中包含字母n的,并在筛选出的名单中前面添加WX-,最后打印所得到的筛选结果;

["job","linda","jenny","danny"]

分析:
1.筛选出名字中包含字母n
2.在筛选出的名单中前面添加WX-
3.最后打印所得到的筛选结果

常见写法:

        var filterNames:[String] = []
        for name in names {
            if name.contains("n"){
                filterNames.append(name)
            }
        }
        var newNames:[String] = []

        for name in filterNames{
            let newName = "WX-"+name
            newNames.append(newName)
            print(newName)
        }

当使用函数时:

names.filter({$0.contains("n")})
            .map({"WX-" + $0})
            .forEach({name in print(name)})

这样写起来,不仅看起来简洁,而且代码的可读性非常强,究竟是什么意思呢?
fliter : 筛选,过滤滤,本意是过滤的意思
map : 映射,会遍历拷贝一份闭包里面的东西
forEach :遍历的意思
$0 : 第一个参数,同理会有 1 , 2,这里是指传入闭包的第一个参数,与forEach达到遍历的目的

分解如下:

      1.
        let filterNames = names.filter({$0.contains("n")})
      2.
        let newNames = filterNames.map({"WX-" + $0})
      3.
        newNames.forEach({name in print(name)})

map的另一个例子,把数组中的每个值扩大两倍

    let nums = [1,2,3,4,5,6,7]
    let newNums = nums.map({$0*2})}
或
    let nums = [1,2,3,4,5,6,7].map({$0*2})}

sort : 排序,排序的方式决定闭包的内容

如:

    var nums = [1,2,3,4,5,6,7]
    nums.sort(by: {$0>$1})

这里就用到了上文的 0 , 1

split : 分割,针对某一特定值进行分割,分成为两个数组

如:

names.split(separator: "linda")
nums.split(separator: 3)

`reduce : 归纳,这个 ······

如:

let nameStr = names.reduce("") { (result:String, str) -> String in
            result + str
        }

log:

joblindajennydanny

参考链接:
1.https://www.jianshu.com/p/ab12d9582ea0
2.https://beeth0ven.github.io/RxSwift-Chinese-Documentation/content/think_reactive/funtional_programming.html

猜你喜欢

转载自blog.csdn.net/Xoxo_x/article/details/80793447
今日推荐