- Swift 教程
- Swift - 首页
- Swift - 概述
- Swift - 环境
- Swift - 基本语法
- Swift - 变量
- Swift - 常量
- Swift - 字面量
- Swift - 注释
- Swift 运算符
- Swift - 运算符
- Swift - 算术运算符
- Swift - 比较运算符
- Swift - 逻辑运算符
- Swift - 赋值运算符
- Swift - 位运算符
- Swift - 其他运算符
- Swift 高级运算符
- Swift - 运算符重载
- Swift - 算术溢出运算符
- Swift - 恒等运算符
- Swift - 范围运算符
- Swift 数据类型
- Swift - 数据类型
- Swift - 整数
- Swift - 浮点数
- Swift - Double
- Swift - 布尔值
- Swift - 字符串
- Swift - 字符
- Swift - 类型别名
- Swift - 可选类型
- Swift - 元组
- Swift - 断言和前提条件
- Swift 控制流
- Swift - 决策制定
- Swift - if 语句
- Swift - if...else if...else 语句
- Swift - if-else 语句
- Swift - 嵌套 if 语句
- Swift - switch 语句
- Swift - 循环
- Swift - for in 循环
- Swift - while 循环
- Swift - repeat...while 循环
- Swift - continue 语句
- Swift - break 语句
- Swift - fall through 语句
- Swift 集合
- Swift - 数组
- Swift - 集合
- Swift - 字典
- Swift 函数
- Swift - 函数
- Swift - 嵌套函数
- Swift - 函数重载
- Swift - 递归
- Swift - 高阶函数
- Swift 闭包
- Swift - 闭包
- Swift - 转义和非转义闭包
- Swift - 自动闭包
- Swift 面向对象编程
- Swift - 枚举
- Swift - 结构体
- Swift - 类
- Swift - 属性
- Swift - 方法
- Swift - 下标
- Swift - 继承
- Swift - 重写
- Swift - 初始化
- Swift - 析构
- Swift 高级
- Swift - ARC 概述
- Swift - 可选链
- Swift - 错误处理
- Swift - 并发
- Swift - 类型转换
- Swift - 嵌套类型
- Swift - 扩展
- Swift - 协议
- Swift - 泛型
- Swift - 访问控制
- Swift - 函数与方法
- Swift - SwiftyJSON
- Swift - 单例类
- Swift 随机数
- Swift 不透明类型和装箱类型
- Swift 有用资源
- Swift - 在线编译
- Swift - 快速指南
- Swift - 有用资源
- Swift - 讨论
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]