返回

Swift 4.1 新鲜烘焙 — CompactMap

IOS

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 函数被重写,以使其更易于使用。