Swift 4.1 新鲜烘焙 — CompactMap
2023-12-19 08:18:44
Swift 4.1 为我们带来了许多令人兴奋的新特性,其中之一就是 compactMap 函数。compactMap 是一个很有用的函数,它允许我们从一个包含可选值的数组中提取出非空值,并将其映射到一个新数组中。
为了理解 compactMap 的用法,我们先来看一下 flatMap 和 filter 这两个函数。flatMap 和 filter 都可以用于处理包含可选值的数组。flatMap 将数组中的每个元素映射到一个新的值,而 filter 则根据一个条件过滤数组中的元素。
flatMap
let numbers = [1, 2, nil, 4, nil, 6]
let mappedNumbers = numbers.flatMap { $0 }
print(mappedNumbers) // [1, 2, 4, 6]
在上面的例子中,flatMap 将数组中的每个元素映射到一个新的值。nil 值被忽略,因此最终结果是一个只包含非空值的数组。
filter
let numbers = [1, 2, nil, 4, nil, 6]
let filteredNumbers = numbers.filter { $0 != nil }
print(filteredNumbers) // [1, 2, 4, 6]
在上面的例子中,filter 根据一个条件过滤数组中的元素。在我们的例子中,条件是元素不等于 nil。因此,最终结果是一个只包含非空值的数组。
compactMap
let numbers = [1, 2, nil, 4, nil, 6]
let compactMappedNumbers = numbers.compactMap { $0 }
print(compactMappedNumbers) // [1, 2, 4, 6]
在上面的例子中,compactMap 将数组中的每个元素映射到一个新的值。nil 值被忽略,因此最终结果是一个只包含非空值的数组。
需要注意的是,compactMap 和 flatMap 的区别在于,compactMap 只适用于包含可选值的数组,而 flatMap 可以适用于任何类型的数组。
什么时候使用 compactMap
compactMap 非常适合从一个包含可选值的数组中提取出非空值。这在许多情况下都非常有用,例如:
- 从一个数组中删除 nil 值
- 将一个数组中的元素映射到一个新数组中
- 从一个数组中过滤出符合特定条件的元素
Swift 4.1 中的 compactMap
在 Swift 4.1 中,compactMap 函数被重写,以使其更易于使用。在新版本中,compactMap 可以直接用于数组,而无需使用 $0 占位符。
let numbers = [1, 2, nil, 4, nil, 6]
let compactMappedNumbers = numbers.compactMap
print(compactMappedNumbers) // [1, 2, 4, 6]
结论
compactMap 是一个非常有用的函数,它可以帮助我们从一个包含可选值的数组中提取出非空值。这在许多情况下都非常有用。在 Swift 4.1 中,compactMap 函数被重写,以使其更易于使用。