位置:首页 > Swift > Swift高阶函数详解:面试与开发中不再无话可说

Swift高阶函数详解:面试与开发中不再无话可说

时间:2026-08-21  |  作者:游戏探长  |  阅读:0

很多 iOS 开发者都知道高阶函数。但多数人对它的理解,往往停留在系统提供的内置函数上,比如 map、filter、reduce、flatmap、compactMap 等等。

这些高阶函数主要是针对集合类型进行处理的。其实,关于高阶函数,我们完全可以透过现象看本质,自己动手去自定义一些高阶函数。

当被问到swift中高阶函数时,别再傻傻无话可说了

什么是 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 中非常强大的特性之一。它们允许你编写更加灵活和可重用的代码。

通过高阶函数,你可以将函数作为参数传递给其他函数,或者从函数中返回函数,从而实现更加复杂的逻辑和抽象。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多