[flatMap]对Optional类型进行flatMap的实验(上)

  • Optional不解包,直接使用flatMap的话,返回的对象依然是Optional
//例子一
let num:Int? = nil
let flatMapNum = num.flatMap{ $0 }  //nil
type(of: flatMapNum)        //Optional<Int>

//例子二
let array:[Int]? = [1, 2, 3]
type(of: array.flatMap{ $0 })  // Optional<Array<Int>>
array.flatMap{ $0 }         // Optional([1, 2, 3])

  • 先强制解包,再使用flatMap,则不会有上述问题(都强制解包了当然没问题...)
//例子二的变种
let array:[Int]? = [1, 2, 3]
type(of: array!.flatMap{ $0 })  // Array<Int>
array!.flatMap{ $0 }            // [1, 2, 3]
  • 如Optional实际值为nil,则flatMap后结果也为nil
let array:[Int]? = nil
type(of: array.flatMap{ $0 })  // Optional<Array<Int>> 但值为nil
array.flatMap{ $0 }         // nil
  • flatMap可以过滤元素为Optional的数组中的nil,并且安全解包
let array: [Int?] = [1, 2, 3, 4, 5, nil, 8]
array.flatMap{ $0 }  //[1, 2, 3, 4, 5, 8]

array.forEach{ print(type(of: $0)) } //输出N个Optional<Int>
let arrayFlatMap = array.flatMap{ $0 }  //[1, 2, 3, 4, 5, 8]
arrayFlatMap.forEach{ print(type(of: $0)) } //输出N个Int

众所周知,flatMap还可以扁平化数组,达到给多维数组降维的目的:

let array: [[Int]] = [[1, 2, 3], [4, 5, 6]]
print(array.flatMap{ $0 }) //[1, 2, 3, 4, 5, 6]

那么如果Optional配上多维数组,会是如何的结果呢......?

各位看官请看题:


//请用flatMap扁平化以下所有数组,不允许强制解包(如值为nil会崩掉的...)
let array1:[[Int]] = [[1, 2, 3], [4, 5, 6]]
let array2:[[Int]]? = [[1, 2, 3], [4, 5, 6]]
let array3:[[Int]?] = [[1, 2, 3], [4, 5, 6]]
let array4:[[Int]?]? = [[1, 2, 3], [4, 5, 6]]
let array5:[[Int?]] = [[1, 2, 3], [4, 5, 6]]
let array6:[[Int?]]? = [[1, 2, 3], [4, 5, 6]]
let array7:[[Int?]?] = [[1, 2, 3], [4, 5, 6]]
let array8:[[Int?]?]? = [[1, 2, 3], [4, 5, 6]]

鬼???

这是答案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对各种值为"空"的情况处理不当,几乎是所有Bug的来源。 在我们的例子里,尽管tmp的值是nil,但调用tmp的r...
    AKyS佐毅阅读 10,559评论 1 13
  • 一、数组中的 map 和 flatMap 数组中的 map 对数组元素进行某种规则的转换,例如: 二、 flatM...
    kmplayer阅读 4,091评论 0 6
  • 上次刷微博的时候看到@唐巧大大发微博贴的几段代码,经过我整理成下面几种情况: 我不理解为什么这几段代码会让 fla...
    Josscii阅读 2,523评论 0 0
  • 深夜食堂黄磊主演的这部剧是6月12号开播的,但是日剧深夜食堂却已经是2015年开播并回声很好的一部。 微博上,还是...
    九里归一阅读 344评论 0 3
  • 关于暑假 对于暑假我还是很愧疚的,虽然说了暑假前面我姐一去北京旅游我就自我管理的很好,他一回来我看他玩我也想玩,我...
    刘瑞新_aed4阅读 169评论 0 1