📜  swiftui中的map vs compactmap - Swift(1)

📅  最后修改于: 2023-12-03 15:35:12.995000             🧑  作者: Mango

SwiftUI 中的 map vs compactMap

SwiftUI 中,mapcompactMap 是两种常用的函数,用于对集合进行转换操作。这两个函数的作用有些相似,但也有不同之处。在本文中,我们将介绍 mapcompactMap 的不同之处,并提供一些使用示例。

map

map 是一个高阶函数,它接收一个闭包作为参数,用于将原有集合中的每个元素转换成一个新的值,最终返回一个新的集合。以下是 map 函数的基本语法:

func map<U>(_ transform: (Element) throws -> U) rethrows -> [U]

其中,transform 是一个闭包,它接收集合中的一个元素作为参数,返回一个新的值。例如,假设我们有一个包含整数的数组,我们可以使用 map 函数将每个整数都加上 1,得到一个新的数组:

let numbers = [1, 2, 3, 4, 5]
let newNumbers = numbers.map { $0 + 1 }
print(newNumbers) // 输出 [2, 3, 4, 5, 6]

需要注意的是,map 函数返回的是一个新的数组,而不是在原有数组中修改元素值。

compactMap

compactMap 函数和 map 函数的作用相似,都是将集合中的元素进行转换。但是,compactMap 会在转换的过程中除去返回值为空的元素,同时返回一个新的数组。以下是 compactMap 函数的基本语法:

func compactMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

其中,transform 闭包需要返回一个可选值。返回值为空的元素会在结果中被过滤掉。例如,我们有一个字符串数组,需要将其中的字符串转换成整数。但是,如果有些字符串并不是数字,那么这些字符串将被视为无效,应该在结果中过滤掉。这时,compactMap 函数正好可以派上用场:

let strings = ["1", "2", "3", "4", "5", "not a number"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // 输出 [1, 2, 3, 4, 5]

需要注意的是,compactMap 函数返回的是一个新的数组,而不是在原有数组中修改元素值,同时会过滤掉返回值为空的元素。

总结

SwiftUI 中的 mapcompactMap 函数都用于对集合中的元素进行转换操作,但是 compactMap 除去了返回值为空的元素。使用 map 函数时,我们需要确保闭包的返回值类型和新的集合类型相同;而使用 compactMap 函数时,我们需要确保闭包的返回值是一个可选值。两个函数都返回一个新的集合,不会在原有集合中进行修改。在实际开发中,我们需要选择合适的函数来完成集合转换操作。