如何展平自定义对象 [[CustomModel?]] 的数组数组?

Ane*_*ees 4 arrays higher-order-functions swift

我只有 Swift 的基础知识。我想var dataSource:[[CustomModel?]]?变成[CustomModel].

我尝试了以下方法

  1. 让平 = dataSource.reduce([],+)
  2. 让平 = dataSource.flatMap { $0 }
  3. 让平 = dataSource.compactMap{ $0 }
  4. 让平 = dataSource.Array(dataSource.joined())

我收到错误

无法将类型“[FlattenSequence<[[CustomModel?]]>.Element]”(又名“Array<Optional< CustomModel >>”)的值转换为预期参数类型“[CustomModel]”

Sha*_*hra 5

您需要首先使用 flatMap{} 展平嵌套数组,然后为了获取非可选值,请使用 CompactMap{}。假设输入数组是 [[Int?]]

let value:[Int] = dataSource.flatMap{$0}.compactMap{ $0 } //Correct
Run Code Online (Sandbox Code Playgroud)

另一个选项会报错 -

let value:[Int] = dataSource.flatMap{ $0 } ?? [] //Error
Run Code Online (Sandbox Code Playgroud)

//正确的 在此输入图像描述

//错误的 在此输入图像描述