Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift flatMap未从阵列中删除nil对象_Swift - Fatal编程技术网

Swift flatMap未从阵列中删除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

我试图从生成对象时得到的数组中删除nil对象:

 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?]]