Swift 中的高阶函数是一类特别有用的函数,它们接受一个或多个函数作为参数,或者返回一个新的函数。高阶函数是函数式编程风格中的核心概念之一,可以用来简化代码、提高复用性和表达能力。在 Swift 标准库中,有许多内建的高阶函数,这里列举一些常见的:
Map (map(_:)):
对集合(如数组、字典等)中的每个元素应用一个转换闭包,并返回一个新的包含转换后元素的集合。
Swift
1let numbers = [1, 2, 3]
2let doubled = numbers.map { $0 * 2 } // 返回 [2, 4, 6]
Filter (filter(_:)):
根据提供的条件闭包来过滤出集合中的元素,并返回满足条件的新集合。
Swift
1let evenNumbers = numbers.filter { $0 % 2 == 0 } // 返回 [2]
Reduce (reduce(::) 或 reduce(into:_:)):
将集合的所有元素组合成一个单一的结果值,通过一个累积闭包进行操作。
Swift
1let sum = numbers.reduce(0, +) // 返回 6
FlatMap (flatMap(:) 或 compactMap(:)):
对集合中的每个元素应用闭包,然后将所有非空结果合并到一个新的单一层级集合中。
Swift
1let optionalNumbers = [Int?] = [1, nil, 3, nil, 5]
2let unwrappedNumbers = optionalNumbers.compactMap { $0 } // 返回 [1, 3, 5]
Sort(by:) 和 sorted(by:):
使用给定的比较闭包对序列进行排序,并返回一个新的已排序的序列。
Swift
1let unsortedWords = ["banana", "apple", "cherry"]
2let sortedWords = unsortedWords.sorted(by: { 1 }) // 返回 ["apple", "banana", "cherry"]
ForEach (_:)
在 Swift 5.1 及以后版本中引入,用于遍历并同步处理集合中的每个元素,通常用于副作用操作而非创建新的集合。
AnySatisfy (contains(where:)) 或 allSatisfy(_:):
contains(where:) 检查序列中是否存在至少一个元素满足给定条件。
allSatisfy(_:) 检查序列中的所有元素是否都满足给定条件。
Reversed ()
返回一个反向顺序排列的新集合或数组。
DispatchWorkItem 的取消闭包:
虽然不是严格意义上的高阶函数,但在异步编程时,你可以提供一个取消闭包给 DispatchWorkItem,当工作项被取消时执行清理任务。
这些函数不仅适用于标准集合类型,还可以扩展到自定义的 Sequence 和 Collection 类型上,使得这些类型也能够支持类似的高阶函数操作。
另外,还有通过筛选条件,获取数组的下标index
筛选条件:
guard let index = dataArray.firstIndex(where: { $0.conversation.target == target }),