Swift数组地图跳过值

时间:2017-10-14 01:06:28

标签: arrays swift

说我有以下代码。

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})而无法解开。

我知道这不是最好的例子,但这是解释我想要做的最简单的例子。

此示例中的目标是nilfinalArray。因此,如果[4,8,13,15]numbers.first(where: {$0 == id}),则只需跳过该值。

这可以在Swift中使用nil吗?或者返回的数组长度是否必须等于我们运行的数组map

快速记录。我的例子很简单,在实践中我的问题更复杂。我有理由想要使用map,因为这是一种基于另一个数组获取新数组的简单方法。

2 个答案:

答案 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}) })