Swift 中的高阶函数是一种特别强大的工具,它们接受函数作为参数或返回函数作为结果,体现了函数式编程风格的核心特性。Swift 标准库中的许多集合类型如 Array, Dictionary, 和 Sequence 都内置了一系列高阶函数,以下是一些最常用的:
map(_:)
接受一个闭包作为参数,遍历集合中的每个元素,并将闭包应用到每个元素上,返回一个新的集合,其中包含经过闭包处理后的新元素。
Swift
1let numbers = [1, 2, 3, 4]
2let squares = numbers.map { 0 } // 返回 [1, 4, 9, 16]
filter(_:)
同样接受一个闭包作为参数,该闭包返回一个布尔值。只有当闭包对于某个元素返回 true 时,该元素才会被包含在返回的新集合中。
Swift
1let evenNumbers = numbers.filter { $0 % 2 == 0 } // 返回 [2, 4]
reduce(::) 或 reduce(into:_:)
用于将集合中的所有元素组合成一个单一的值。闭包接受两个参数:累积值(accumulator)和下一个元素,每次迭代都会将下一个元素与累积值结合生成新的累积值。
Swift
1let sum = numbers.reduce(0, +) // 返回 10,计算所有数字之和
flatMap(:) 或 compactMap(:)
flatMap 将闭包应用于集合的每个元素,并将返回值扁平化地放入新集合中。如果闭包返回的是可展开的集合(如数组),则这些集合会被展开并合并到最终结果中。
Swift
1let strings = ["1", "2", "3"]
2let numbersFromString = strings.flatMap { Int($0) } // 返回 [1, 2, 3]
compactMap 类似于 flatMap,但仅保留非nil的映射结果,常用于过滤掉nil值。
sort(by:)
虽然不是严格意义上的高阶函数(因为它不直接接受或返回函数),但可以通过闭包定义排序规则:
Swift
1let unsortedNumbers = [3, 1, 4, 2]
2let sortedNumbers = unsortedNumbers.sorted(by: { 1 }) // 返回 [1, 2, 3, 4]
通过这些高阶函数,Swift 编程可以变得更加简洁、高效且易于理解,有助于减少重复代码和提升代码复用性。
网友评论