Swift - 高阶函数



高阶函数是一种特殊的函数类型;它将一个或多个函数作为参数,或者可以返回一个函数作为其结果。它们可以轻松地操作和转换给定集合的数据,而无需创建任何额外的用户定义函数。以下是 Swift 语言提供的高阶函数:

  • forEach()
  • map()
  • compactMap()
  • flatMap()
  • filter()
  • reduce()
  • sort()
  • sorted()

所有高阶函数都基于闭包,但不用担心,您不必成为闭包大师。它们易于使用,还可以减少项目中代码的大小,并且可以重用。

forEach() 函数

ForEach() 函数与 for-in 循环非常相似。它将迭代集合(例如数组)中的所有元素,并且不返回任何内容。请记住,您不能在 forEach() 函数内部使用 continue 和 break 来退出当前正在执行的语句。

语法

以下是 forEach() 函数的语法:

func forEach(_x: (Self.Element)throws-> Void) rethrows

参数

x 表示一个闭包,它将给定序列中的一个项目作为参数。

示例

使用 forEach() 函数显示数组所有元素的 Swift 程序。

import Foundation

let numbersInWord = ["One", "Two", "Three", "Four", "Five", "Six"]
numbersInWord.forEach { 
   element in print(element)
}

输出

它将产生以下输出:

One
Two
Three
Four
Five
Six

map() 函数

map 函数通过对集合的所有元素执行操作并返回一个包含该操作结果的新集合来工作。此函数旨在将对象从一种类型转换为另一种类型(以及相同类型)。

语法

以下是 map() 函数的语法:

func map<T>(_ mTransform: (Self.Element) throws -> T) rethrows -> [T]

参数

mTransform 是一个映射闭包。它接受来自给定序列的元素,并返回相同或不同类型的转换值。

返回值

它将返回一个转换后的数组。

示例

使用 map() 函数将整数转换为字符串的 Swift 程序。

import Foundation

let numbers = [1, 2, 3, 4, 5, 6, 7]
let numbersInString = numbers.map { 
   number in String(number)
}
print("numbersInString: \(numbersInString)")

输出

它将产生以下输出:

numbersInString: ["1", "2", "3", "4", "5", "6", "7"]

compactMap() 函数

compactMap() 遍历数组中的元素,仅返回一个更新后的数组,其中包含满足其主体中陈述的条件的元素。数组将在没有任何导致 nil 值的元素的情况下更新。或者我们可以说 compactMap() 循环遍历数组中的所有元素并返回非 nil 值。

语法

以下是 compactMap() 函数的语法:

Func compactMap<ElementOfResult>(_ mTransform: 
(Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

参数

mTransform 是一个闭包。它接受来自给定序列的元素,并返回一个可选值。

返回值

它将返回一个包含非 nil 值的转换后的数组。

示例

使用 comapctMap() 函数将字符串数组转换为整数数组的 Swift 程序。

import Foundation

let numbersInString = ["1", "x2", "3", "4", nil, "five5"]
let validNumbers = numbersInString.compactMap { 
   stringValue in
   Int(stringValue ?? "")
}
print("validNumbers: \(validNumbers)")

输出

它将产生以下输出:

validNumbers: [1, 3, 4]

flatMap() 函数

flatMap() 函数允许我们将一组数组转换为包含所有元素的单个集合。它将指定集合的元素连接到结果集合中。

语法

以下是 flatMap() 函数的语法:

func map<SegmentOfResult>(_ mTransform: 
(Self.Element) throws -> SegmentOfResult) rethrows -> 
[SegmentOfResult.Element] where SegmentOfResult : Sequence

参数

mTransform 是一个闭包。它接受来自给定序列的元素,并返回一个序列。

返回值

它将返回一个扁平化的数组。

示例

使用 flatMap() 函数将多维数组转换为一维数组的 Swift 程序。

import Foundation

let marks = [[3, 4, 5], [2, 5, 3], [1, 2, 2], [5, 5, 4], [3, 5, 3]]
let allMarks = marks.flatMap { 
   marksArray -> [Int] in
   marksArray
}
print("allMarks: \(allMarks)")

输出

它将产生以下输出:

allMarks: [3, 4, 5, 2, 5, 3, 1, 2, 2, 5, 5, 4, 3, 5, 3]

filter() 函数

filter() 将迭代数组中的所有元素,并且将仅返回一个更新后的数组,其中包含满足 filter 主体内部编写的条件的元素。这是一个重要的函数。在编写代码时,您需要多次过滤集合以根据条件生成过滤后的集合。

闭包的返回类型是 Bool 值;结果数组中的项目是满足主体内部条件的那些项目;

语法

以下是 filter() 函数的语法:

func filter(_ resultantCollection: (Self.Element) throws -> Bool) rethrows -> Self

参数

resultantCollection 是一个闭包。它接受来自给定序列的元素,并返回一个布尔值,该值指示元素是否应包含在结果集合中。

返回值

它将返回一个仅包含满足主体内部条件的项目的集合。

示例

使用 filter() 函数从给定数组中仅显示正数的 Swift 程序。

import Foundation

let numbers = [-12, 23, -1, 56, 9, -2, 0, 14, 8]
let positives = numbers.filter { 
   number in
   number > 0
}
print("positives: \(positives)")

输出

它将产生以下输出:

positives: [23, 56, 9, 14, 8]

reduce() 函数

reduce() 函数将迭代数组中的所有元素,并返回一个包含所有元素组合值的的对象。

语法

以下是 reduce() 函数的语法:

func reduce<Result>(_initialRes: Result, _nestRes: (Result, Self.Element) throws -> T) 
rethrows -> Result) rethrows->Result

参数

此函数采用两个参数:

  • 参数 initialRes 用于存储初始累积值,该值在第一次执行闭包时进一步传递给 nextRes。

  • nextRes 是一个闭包,用于将累积值和序列的元素组合成一个新的累积值,该值在 nextRes 闭包的后续调用中进一步使用。

返回值

它将返回最终值。或者如果序列不包含任何项目,则它将返回 initialRes。

示例

使用 reduce() 函数查找数组元素总和的 Swift 程序。

import Foundation

let numbers = [1, 5, 2, 10, 6]
let sum = numbers.reduce(0) { 
   (result, number) -> Int in
   result + number
}
print("sum:", sum)

输出

它将产生以下输出:

sum: 24

sort() 函数

sort() 函数将以升序对给定集合的所有元素进行排序。它也可以以降序对元素进行排序。

语法

以下是 sort() 函数的语法:

func sort()

参数

它不接受任何参数。

返回值

它将返回一个排序后的集合。

示例

使用 sort() 函数对数组元素进行排序的 Swift 程序。

import Foundation

var numbers = [1, 5, 2, 10, 6]
numbers.sort()
print("Sorted numbers: \(numbers)")

输出

它将产生以下输出:

Sorted numbers: [1, 2, 5, 6, 10]

sorted() 函数

sorted() 函数将根据闭包主体中编写的条件对所有元素进行排序,并返回一个新的排序后的数组。它可以以升序和降序对元素进行排序。

语法

以下是 sorted() 函数的语法:

func sorted()

参数

它不接受任何参数。

返回值

它将返回一个排序后的集合。

示例

使用 sorted() 函数对数组元素进行排序的 Swift 程序。

import Foundation

var numbers = [1, 5, 2, 10, 6]
let sorted_values = numbers.sorted()
print("Sorted numbers: \(sorted_values)")

输出

它将产生以下输出:

Sorted numbers: [1, 2, 5, 6, 10]
广告