服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - Swift中的高阶函数功能作用示例详解

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

2023-03-27 14:42AliliWVIP Swift

这篇文章主要为大家介绍了Swift中的高阶函数功能作用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

高阶函数的作用

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

1. 简化代码

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

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

?
1
2
3
4
5
6
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函数可以将上述代码简化成一行代码:

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

2. 提高可读性

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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函数可以将上述代码简化成一行代码:

?
1
2
3
4
5
6
7
8
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的数字。如果没有高阶函数,我们可能需要写出如下代码:

?
1
2
3
4
5
6
7
8
9
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]

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

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

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

4. 提高代码的可重用性

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

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

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

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

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

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

?
1
2
3
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0, +)
print(sum) // 输出 15

常见的高阶函数

1. map()

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

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

2. filter()

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

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

3. reduce()

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

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

4. sorted()

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

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

5. forEach()

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

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

6. compactMap()

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

?
1
2
3
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()函数接受一个闭包作为参数,并返回一个新的序列,其中包含原序列中通过闭包返回值的方式进行转换后的所有元素。例如:

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

8. zip()

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

?
1
2
3
4
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。例如:

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

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

10. contains()

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

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

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

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

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

以上就是Swift中的高阶函数功能作用示例详解的详细内容,更多关于Swift 高阶函数的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7212143399037681701

延伸 · 阅读

精彩推荐
  • SwiftSwift中switch语句区间和元组模式匹配

    Swift中switch语句区间和元组模式匹配

    这篇文章主要介绍了Swift中switch语句区间和元组模式匹配的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...

    yulong_xiao6022020-12-30
  • SwiftSwift中用到extension的一些基本的扩展功能讲解

    Swift中用到extension的一些基本的扩展功能讲解

    这篇文章主要介绍了Swift的一些基本的扩展功能,即extension关键字的使用,需要的朋友可以参考下...

    Swift教程网5492020-12-23
  • SwiftObjective-C中的block与Swift中的尾随闭包使用教程

    Objective-C中的block与Swift中的尾随闭包使用教程

    Block是OC中的闭包,他和swift中的闭包有什么区别呢?下面这篇文章就来给大家介绍关于Objective-C中的block与Swift中的尾随闭包使用的相关资料,文中通过示例...

    小时候De_我11672021-01-09
  • Swiftswift4更新中所遇到的一些问题总结

    swift4更新中所遇到的一些问题总结

    这篇文章主要给大家介绍了关于在swift4更新中所遇到的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    我要在河边钓一整天的鱼5482021-01-09
  • SwiftSwift中的指针操作详解

    Swift中的指针操作详解

    从传统的C代码和与之无缝配合的Objective-C代码迁移到Swift并非小工程,我们的代码库肯定会时不时出现一些和C协作的地方,如果想要继续使用那些C API的话...

    Swiftyper7362021-01-03
  • SwiftSwift中的指针操作和使用详细介绍

    Swift中的指针操作和使用详细介绍

    这篇文章主要介绍了Swift中的指针操作和使用详细介绍,Apple期望在Swift中指针能够尽量减少登场几率,因此在Swift中指针被映射为了一个泛型类型,并且还比较...

    Swift教程网4042020-12-19
  • SwiftSwiftUI自定义导航的方法实例

    SwiftUI自定义导航的方法实例

    导航是我们平时经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于SwiftUI自定义导航的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以...

    Swift君4102022-07-28
  • SwiftSwift实现倒计时5秒功能

    Swift实现倒计时5秒功能

    这篇文章主要为大家详细介绍了Swift实现倒计时5秒功能,在“登录”和“注册”页面也有相似功能,文中示例代码介绍的非常详细,具有一定的参考价值,...

    枫志应明10152021-01-14