说我有以下代码。
rustup
但是我收到错误,因为有时let myArray = [1,4,5,8,9,13,14,15]
let numbers = [4,8,13,15]
let finalArray = myArray.map({id in numbers.first(where: {$0 == id})!})
有时会返回numbers.first(where: {$0 == id})
而无法解开。
我知道这不是最好的例子,但这是解释我想要做的最简单的例子。
此示例中的目标是nil
为finalArray
。因此,如果[4,8,13,15]
为numbers.first(where: {$0 == id})
,则只需跳过该值。
这可以在Swift中使用nil
吗?或者返回的数组长度是否必须等于我们运行的数组map
?
快速记录。我的例子很简单,在实践中我的问题更复杂。我有理由想要使用map
,因为这是一种基于另一个数组获取新数组的简单方法。
答案 0 :(得分:1)
正如@LeoDabus所指出的那样,在这种情况下你应该使用flatMap
代替map
。原因是因为flatMap
可以返回nil
,因为flatMap的返回类型为U?
,而map
的返回类型为U
且无法处理nil
1}}。
因此,这一行可以nil
处理flatMap
:
let finalArray = myArray.flatMap({ id in numbers.first(where: {$0 == id}) })
答案 1 :(得分:1)
为了扩展Rashwan L的答案,我相信Swift 4版本如下:
let finalArray = myArray.compactMap({ id in numbers.first(where: {$0 == id}) })