Swift高阶函数详解:面试与开发中不再无话可说
时间:2026-08-21 | 作者:游戏探长 | 阅读:0很多 iOS 开发者都知道高阶函数。但多数人对它的理解,往往停留在系统提供的内置函数上,比如 map、filter、reduce、flatmap、compactMap 等等。
这些高阶函数主要是针对集合类型进行处理的。其实,关于高阶函数,我们完全可以透过现象看本质,自己动手去自定义一些高阶函数。
什么是 swift 中的高阶函数
在 swift 中,高阶函数是指那些可以接收函数作为参数,或者返回一个函数作为结果的函数。
高阶函数提供了一种强大的抽象机制。它允许你将函数作为一等公民(first-class citizen)来操作,也就是函数可以像变量一样被传递和返回。
接收函数作为参数的高阶函数
你可以定义一个高阶函数。它接收一个或多个函数作为参数,并在其内部调用这些函数。
// 定义一个高阶函数,接收一个无参数无返回值的函数作为参数
func execute(_ action: () -> Void) {
action()
}
// 定义一个简单的函数,用于测试高阶函数
func sayHello() {
print("Hello, World!")
}
// 调用高阶函数,并传递 sayHello 作为参数
execute(sayHello) // 输出: Hello, World!
在这个例子中,execute 是一个高阶函数。它接收一个类型为 () -> Void 的函数作为参数,也就是一个没有参数且没有返回值的函数。
我们定义了 sayHello 函数,并将其传递给 execute,从而实现了函数的调用。
返回函数作为结果的高阶函数
高阶函数也可以返回一个函数作为结果。这样一来,你就可以根据某些条件动态地创建和返回不同的函数。
// 定义一个高阶函数,返回一个根据参数返回不同结果的函数
func createGreetingFunction(forName name: String) -> () -> String {
return {
return "Hello, (name)!"
}
}
// 调用高阶函数,获取一个返回问候语的函数
let greetAlice = createGreetingFunction(forName: "Alice")
let greetBob = createGreetingFunction(forName: "Bob")
// 调用返回的函数
print(greetAlice()) // 输出: Hello, Alice!
print(greetBob()) // 输出: Hello, Bob!
这个例子里,createGreetingFunction 是个高阶函数。它接收一个字符串参数name,然后返回一个类型为 () -> String的函数。
简单来说,这就是一个没有参数、但能返回字符串的函数。调用 createGreetingFunction 两次后,分别得到了 greetAlice 和 greetBob 这两个函数。
再调用它们,就能输出对应的问候语。
闭包作为高阶函数的参数和返回值
在 swift 中,闭包(closure)是一种特殊的函数。它可以捕获和存储其所在上下文的引用。
闭包可以作为高阶函数的参数和返回值。
// 定义一个高阶函数,接收一个闭包作为参数,并返回闭包调用的结果
func processNumbers(_ numbers: [Int], _ operation: (Int, Int) -> Int) -> Int {
var result = numbers[0]
for number in numbers.dropFirst() {
result = operation(result, number)
}
return result
}
// 定义一个简单的加法闭包
let add = { (a: Int, b: Int) -> Int in
return a + b
}
// 调用高阶函数,并传递加法闭包作为参数
let sum = processNumbers([1, 2, 3, 4, 5], add)
print(sum) // 输出: 15
在这个例子中,processNumbers 是一个高阶函数。它接收一个整数数组,以及一个类型为 (Int, Int) -> Int 的闭包作为参数。
闭包 add 实现了加法操作,并将其传递给 processNumbers 函数。函数内部通过迭代数组,并使用闭包对元素进行操作,最终返回操作的结果。
swift 标准库中的高阶函数
Swift 的标准库也提供了许多高阶函数,如 map、filter、reduce 等。这些函数通常用于处理集合类型,如数组和字典。
let numbers = [1, 2, 3, 4, 5]
// 使用 map 函数将每个元素乘以 2
let doubled = numbers.map { $0 * 2 }
print(doubled) // 输出: [2, 4, 6, 8, 10]
// 使用 filter 函数筛选出偶数元素
let evens = numbers.filter { $0 % 2 == 0 }
print(evens) // 输出: [2, 4]
// 使用 reduce 函数计算所有元素的总和
let sum = numbers.reduce(0, +)
print(sum) // 输出: 15
// 使用 flatMap 函数来做集合展平
let nums = [[1,2],[3,4,5],[6,7,8]]
let newNums = nums.flatMap{$0}
print(newNums)// 输出:[1,2,3,4,5,6,7,8]
// 使用 compactMap 函数来处理集合返回一个不含空元素的集合
let arr = [1,2,3,nil,4,nil]
let result = arr.compactMap{$0}
print(result) // 输出:[1,2,3,4]
常见用法包括
- map:对集合中的每个元素进行转换。
- filter:按条件筛选元素。
- reduce:将多个元素合并为一个结果。
- flatMap:用于集合展平。
- compactMap:返回一个不含空元素的集合。
总结
高阶函数是 Swift 中非常强大的特性之一。它们允许你编写更加灵活和可重用的代码。
通过高阶函数,你可以将函数作为参数传递给其他函数,或者从函数中返回函数,从而实现更加复杂的逻辑和抽象。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 蚂蚁新村小课堂今日答案9月30日 职业分类大典中工种与职业的关系是
- 时间:2026-09-30
-
- 蚂蚁新村2026年9月30日答案最新
- 时间:2026-09-30
-
- 蚂蚁庄园答案2026年10月1日
- 时间:2026-09-30
-
- 蚂蚁庄园今天答题答案2026年10月1日
- 时间:2026-09-30
-
- 蚂蚁庄园今日答案2026年10月1日
- 时间:2026-09-30
-
- “国庆”一词最早见于我国哪个朝代 蚂蚁庄园今日答案10.1
- 时间:2026-09-30
-
- 小鸡答题今天的答案是什么2026年10月1日
- 时间:2026-09-30
-
- 蚂蚁庄园每日答题答案2026年10月1日
- 时间:2026-09-30
