filter与flatMap过滤nil
使用高阶函数过滤一个数组中的nil可以有两种方法:filter和flatMap。
filter方法如下代码所示:
let array: [Int?] = [1, 2, 3, 5, nil, 9]
let result = array.filter { element in
element != nil
}
print(result) // [Optional(1), Optional(2), Optional(3), Optional(5), Optional(9)]
flatMap方法如下代码所示:
let array: [Int?] = [1, 2, 3, 5, nil, 9]
let result: [Int] = array.flatMap {
$0
}
print(result) // [1, 2, 3, 5, 9]
从输出可以看出,filter返回的仍然是一个Optional数组,而flatMap返回的是一个非Optional数组。一般推荐使用第二种方法。