swift 高阶函数用法介绍

Swift 中的高阶函数是一种特别强大的工具,它们接受函数作为参数或返回函数作为结果,体现了函数式编程风格的核心特性。Swift 标准库中的许多集合类型如 Array, Dictionary, 和 Sequence 都内置了一系列高阶函数,以下是一些最常用的:

map(_:)

接受一个闭包作为参数,遍历集合中的每个元素,并将闭包应用到每个元素上,返回一个新的集合,其中包含经过闭包处理后的新元素。
Swift
1let numbers = [1, 2, 3, 4]
2let squares = numbers.map { 0 *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: { 0 <1 }) // 返回 [1, 2, 3, 4]
通过这些高阶函数,Swift 编程可以变得更加简洁、高效且易于理解,有助于减少重复代码和提升代码复用性。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容