Swift中的高阶函数功能作用示例详解

Rhea ·
更新时间:2024-09-20
· 1321 次阅读

目录

高阶函数的作用

1. 简化代码

2. 提高可读性

3. 支持函数式编程

4. 提高代码的可重用性

常见的高阶函数

1. map()

2. filter()

3. reduce()

4. sorted()

5. forEach()

6. compactMap()

7. flatMap()

8. zip()

9. first()

10. contains()

高阶函数的作用

Swift中的高阶函数是指那些参数或返回值是函数的函数。它们的存在使得我们可以用非常简洁和优雅的代码来解决许多问题。

1. 简化代码

高阶函数的一大作用是简化代码。例如,使用map函数可以对数组中的所有元素进行相同的操作。

假设我们有一个存储了一组整数的数组,现在想要对所有的元素进行加法操作,例如将数组中每个元素都加上10。如果没有map函数,我们可能需要写出如下代码:

var numbers = [1, 2, 3, 4, 5] var result = [Int]() for number in numbers { result.append(number + 10) } print(result) // 输出 [11, 12, 13, 14, 15]

在上边的代码中,我们使用循环遍历了数组,并对每个元素进行了加法操作,最终将结果存储到了另一个数组中。

使用map函数可以将上述代码简化成一行代码:

let numbers = [1, 2, 3, 4, 5] let result = numbers.map { $0 + 10 } print(result) // 输出 [11, 12, 13, 14, 15] 2. 提高可读性

高阶函数可以使得代码更容易理解和维护。例如,使用filter函数可以使得代码更加清晰地表达筛选的条件。

假设我们有一个存储了一组商品的数组,现在想要对商品进行筛选,只选择价格大于等于100的商品,并且将它们的名称存储到一个新的数组中。如果没有filter函数,我们可能需要写出如下代码:

var products = [ Product(name: "iPhone", price: 999), Product(name: "iPad", price: 699), Product(name: "MacBook", price: 1499), Product(name: "iPod", price: 199) ] var result = [String]() for product in products { if product.price >= 100 { result.append(product.name) } } print(result) // 输出 ["iPhone", "iPad", "MacBook", "iPod"]

在上边的代码中,我们使用循环遍历了商品数组,对每个商品进行了价格判断,并将符合条件的商品名称存储到了另一个数组中。

使用filter函数可以将上述代码简化成一行代码:

let products = [ Product(name: "iPhone", price: 999), Product(name: "iPad", price: 699), Product(name: "MacBook", price: 1499), Product(name: "iPod", price: 199) ] let result = products.filter { $0.price >= 100 }.map { $0.name } print(result) // 输出 ["iPhone", "iPad", "MacBook", "iPod"] 3. 支持函数式编程

高阶函数是函数式编程的基石。使用高阶函数可以将计算过程分解成独立的函数块,从而实现函数的组合和复用。例如,以map和filter函数为例,说明高阶函数是如何实现函数的组合和复用的。

假设我们有一个存储了一组数字的数组,我们想要将每个数字平方,并将平方后的结果过滤出来,只保留那些大于10的数字。如果没有高阶函数,我们可能需要写出如下代码:

let numbers = [1, 2, 3, 4, 5] var squaredNumbers = [Int]() for number in numbers { let squared = number * number if squared > 10 { squaredNumbers.append(squared) } } print(squaredNumbers) // 输出 [16, 25]

上述代码中,我们使用循环遍历了数字数组,对每个数字进行了平方操作,并进行了判断过滤操作,将符合条件的数字存储到了另一个数组中。

使用高阶函数可以将上述代码简化成几行代码:

let numbers = [1, 2, 3, 4, 5] let squaredNumbers = numbers.map { $0 * $0 }.filter { $0 > 10 } print(squaredNumbers) // 输出 [16, 25] 4. 提高代码的可重用性

高阶函数可以让我们抽象出通用的操作,从而让同一个函数可以适用于不同的场景。例如,使用reduce函数可以将一个操作应用于一个数组的所有元素,从而使得我们可以实现各种操作,例如求和、取最大值等等。

我们以求和为例说明reduce函数的应用:

假设我们有一个存储了一组数字的数组,我们想要求这组数字的和。如果没有reduce函数,我们可能需要写出如下代码:

let numbers = [1, 2, 3, 4, 5] var sum = 0 for number in numbers { sum += number } print(sum) // 输出 15

上述代码中,我们使用循环遍历了数字数组,并对每个数字进行了累加操作,得到最终的和。

使用reduce函数可以将上述代码简化成一行代码:

let numbers = [1, 2, 3, 4, 5] let sum = numbers.reduce(0, +) print(sum) // 输出 15 常见的高阶函数 1. map()

map()函数接受一个闭包作为参数,并对序列中的每个元素应用该闭包,最终返回一个新的序列,其中包含闭包的返回值。例如:

let numbers = [1, 2, 3, 4, 5] let squaredNumbers = numbers.map { $0 * $0 } print(squaredNumbers) // [1, 4, 9, 16, 25] 2. filter()

filter()函数接受一个闭包作为参数,并返回一个新的序列,其中包含原序列中满足闭包条件的元素。例如:

let numbers = [1, 2, 3, 4, 5] let evenNumbers = numbers.filter { $0 % 2 == 0 } print(evenNumbers) // [2, 4] 3. reduce()

reduce()函数接受一个闭包作为参数,并对序列中的所有元素进行迭代运算,最终返回一个合并后的值。例如:

let numbers = [1, 2, 3, 4, 5] let sum = numbers.reduce(0) { $0 + $1 } print(sum) // 15 4. sorted()

sorted()函数接受一个闭包作为参数,并返回一个新的序列,其中包含原序列按照闭包指定的排序方式排列后的元素。例如:

let numbers = [5, 2, 4, 1, 3] let sortedNumbers = numbers.sorted { $0 < $1 } print(sortedNumbers) // [1, 2, 3, 4, 5] 5. forEach()

forEach()函数接受一个闭包作为参数,并对序列中的每个元素应用该闭包,但不返回任何值。例如:

let numbers = [1, 2, 3, 4, 5] numbers.forEach { print($0) } // 1 // 2 // 3 // 4 // 5 6. compactMap()

compactMap()函数接受一个闭包作为参数,并返回一个新的序列,其中包含原序列中不为nil的元素,通过闭包返回值的方式进行转换。例如:

let numbers = ["1", "2", "3", "4", "5", "6"] let evenNumbers = numbers.compactMap { Int($0) }.filter { $0 % 2 == 0 } print(evenNumbers) // [2, 4, 6] 7. flatMap()

flatMap()函数接受一个闭包作为参数,并返回一个新的序列,其中包含原序列中通过闭包返回值的方式进行转换后的所有元素。例如:

let numbers = [[1, 2], [3, 4], [5, 6]] let flattenedNumbers = numbers.flatMap { $0 } print(flattenedNumbers) // [1, 2, 3, 4, 5, 6] 8. zip()

zip()函数接受两个序列作为参数,并返回一个新的序列,其中包含两个序列中对应位置的元素进行组合后的元素。例如:

let numbers1 = [1, 2, 3] let numbers2 = [4, 5, 6] let zippedNumbers = zip(numbers1, numbers2).map { $0 + $1 } print(zippedNumbers) // [5, 7, 9] 9. first()

first()函数接受一个闭包作为参数,并返回序列中符合闭包条件的第一个元素,如果没有符合条件的元素则返回nil。例如:

let numbers = [1, 2, 3, 4, 5] let firstEvenNumber = numbers.first { $0 % 2 == 0 } print(firstEvenNumber) // Optional(2)

这里的闭包接受一个元素作为参数,并返回一个Bool值来表示它是否符合条件。

10. contains()

contains()函数接受一个闭包作为参数,并返回一个Bool值,表示序列中是否存在符合闭包条件的元素。例如:

let numbers = [1, 2, 3, 4, 5] let hasEvenNumber = numbers.contains { $0 % 2 == 0 } print(hasEvenNumber) // true

这里的闭包接受一个元素作为参数,并返回一个Bool值来表示它是否符合条件。

高阶函数在项目中的使用非常重要,它们可以提高代码的可复用性、可读性、可拓展性和性能,从而让我们能够更加高效地开发出高质量的软件产品。

学习 Swift,勿忘初心,方得始终。但要陷入困境时,也不要忘了最初的梦想和时代所需要的技能。

以上就是Swift中的高阶函数功能作用示例详解的详细内容,更多关于Swift 高阶函数的资料请关注软件开发网其它相关文章!



Swift 示例 函数

需要 登录 后方可回复, 如果你还没有账号请 注册新账号