简述
map和flatMap是swift中两个常用的函数,它们提现了swift中很多特性。
map
1、map的使用
1 | let numbers = [1,2,3,4] |
大家可以看一下,map方法接受的是一个闭包参数,然后它会遍历整个numbers数组,并对数组中每一个元素执行闭包中定义的操作。相当于对数组中的所有元素做了一个映射。
这个例子就是对numbers数组的所有元素进行了加2。
再看一个例子:
1 | let array1 = ["a","b","c","d"] |
2、flatMap的使用map
可以理解为对一个集合类型的所有元素做了一个映射操作,那么flatMap
呢?
让我们来看一下下面的一个例子:
1 | result = numbers.flatMap{ $0 + 2 } //输出:3,4,5,6 |
我们对同样的数组使用了flatMap
进行处理,得到了相同的结果。那么这两个到底有什么区别呢?
1 | let array1 = [[1,2,3],[4,5,6]] |
看到这两个数组的输出就看出差别来了,对于二维数组,map
和flatMap
的结果就不同了。
flatMap
会遍历数组的元素,并对这些元素执行闭包中定义的操作。 但唯一和map
不同的是,它对最终的结果进行了所谓的 “降维” 操作。 本来原始数组是一个二维的, 但经过 flatMap
之后,它变成一维的了。
大家再来看看flatMap的第二个作用:
1 | let optionalArray: [String?] = ["AA","BB",nil,"CC"] |
大家可以看到,在flatMap
的返回结果中, 成功的将原数组中的 nil 值过滤掉了。 再仔细观察,你会发现更多。 使用 flatMap 调用之后, 数组中的所有元素都被解包了。也就是说原始数组的类型是 [String?]
, 而 flatMap
调用后变成了 [String]
。 这也是flatMap
和 map
的一个重大区别。