Swift flatMap未从阵列中删除nil对象
我试图从生成对象时得到的数组中删除nil对象:Swift flatMap未从阵列中删除nil对象,swift,Swift,我试图从生成对象时得到的数组中删除nil对象: static func books(fromDictArray array: [[String: Any]]) -> [Books?] { return array.map(GettyTwo.init) } 在这里,我只尝试使用非nil对象: let inventoryBooks = [Books.books(fromDictArray: arrayOfBooks)].flatMap{$0} //this do
static func books(fromDictArray array: [[String: Any]]) -> [Books?] {
return array.map(GettyTwo.init)
}
在这里,我只尝试使用非nil对象:
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}
我做错了什么?你不应该把它放在[]里。相反,请尝试:
let inventoryBooks = Books.books(fromDictArray: arrayOfBooks).flatMap{$0}
是[]正在生成一个数组,其中包含一个项,这是fromDictArray调用的结果。所以它的结构像[[1,2,3]],而不是[1,2,3]。因此,当您调用flatmap时,它会检查一个不是nil的项并返回它 你不应该把它放在[]里。相反,请尝试:
let inventoryBooks = Books.books(fromDictArray: arrayOfBooks).flatMap{$0}
是[]正在生成一个数组,其中包含一个项,这是fromDictArray调用的结果。所以它的结构像[[1,2,3]],而不是[1,2,3]。因此,当您调用flatmap时,它会检查一个不是nil的项并返回它 您正在将
Books.Books(fromDictArray:arrayOfBooks)
包装为数组文字。你可能不是有意的;)@哈米什,你这是什么意思?方括号用来表示数组的字面意思-所以当你说[Books.Books(fromdictary:arrayOfBooks)]
时,你得到的是[[Books?]]
,而不是[Books?]
flatMap(:)
可以展平嵌套的数组,所以它就是这样做的–为您返回一个[Books?]
。只需去掉方括号。您正在将Books.Books(fromDictArray:arrayOfBooks)
包装到一个数组文本中。你可能不是有意的;)@哈米什,你这是什么意思?方括号用来表示数组的字面意思-所以当你说[Books.Books(fromdictary:arrayOfBooks)]
时,你得到的是[[Books?]]
,而不是[Books?]
flatMap(:)
可以展平嵌套的数组,所以它就是这样做的–为您返回一个[Books?]
。去掉方括号就行了。你忘了对代码应用你自己的建议;)它是用[[Books?]
调用的flatMap(:)
的展平版本,而不是可选的展开版本–因此您会得到一个[Books?]
。这是什么意思?我现在觉得很对复制和粘贴的速度太快了。谢谢。我的意思是说“当你调用flatmap时,它会检查一个不是零的项目并返回它。”这是不正确的,因为它是被调用的flatmap(:)
,所以没有nil
检查——它只是去掉一个嵌套层,返回一个[Books?]
。如果调用的是flatMap(:)
的可选展开版本,您将返回[[Books?]]
。您忘记对代码应用自己的建议;)它是用[[Books?]
调用的flatMap(:)
的展平版本,而不是可选的展开版本–因此您会得到一个[Books?]
。这是什么意思?我现在觉得很对复制和粘贴的速度太快了。谢谢。我的意思是说“当你调用flatmap时,它会检查一个不是零的项目并返回它。”这是不正确的,因为它是被调用的flatmap(:)
,所以没有nil
检查——它只是去掉一个嵌套层,返回一个[Books?]
。如果调用的是flatMap(:)
的可选展开版本,则会返回[[Books?]]
。