flatMap不会从数组中删除nil对象

时间:2017-04-22 23:03:30

标签: swift

我尝试删除数组中的nil个对象,当我生成对象时,我会这样做:

 static func books(fromDictArray array: [[String: Any]]) -> [Books?] {

        return array.map(GettyTwo.init)
    }

我在这里尝试仅使用非零对象:

 let inventoryBooks = [Books.books(fromDictArray: arrayOfBooks)].flatMap{$0} //this doesn't remove the nil objects

但如果我这样做:

let noNilElements = inventoryBooks.flatMap{$0}

这将删除nil个对象。

我向你们提出的问题是为什么这不起作用:

let inventoryBooks = [Books.books(fromDictArray: arrayOfBooks)].flatMap{$0}

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你不应该在[]中拥有它。而是尝试:

let inventoryBooks = Books.books(fromDictArray: arrayOfBooks).flatMap{$0}

拥有它是[]正在创建一个包含一个项目的数组,即fromDictArray调用的结果。所以它的结构类似于[[1,2,3]],而不是[1,2,3]。因此,当您调用flatmap时,它会检查一个项目,该项目不是,并且返回它。