《Swift开发实战》——第2章,第2.4节函数和闭包

简介:

本节书摘来自异步社区《Swift开发实战》一书中的第2章,第2.4节函数和闭包,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.4 函数和闭包
在本章前面的实例2-1中,testfunc就是一个函数。在Swift语言中,使用关键字func来声明一个函数,使用名字和参数来调用函数,使用“→”来指定函数返回值。例如,如下所示的演示代码。

func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")

在Swift语言中,使用一个元组来返回多个值。例如,如下所示的演示代码。

func getGasPrices() -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79)
}
getGasPrices()

在Swift语言中,函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式。例如,如下所示的演示代码。

func sumOf(numbers: Int...) -> Int {
    var sum = 0
    for number in numbers {
        sum += number
    }
    return sum
}
sumOf()
sumOf(42, 597, 12)

在Swift语言中,可以使用嵌套函数,被嵌套的函数可以访问外侧函数的变量,也可以使用嵌套函数来重构一个太长或者太复杂的函数。例如,如下所示的演示代码。

func returnFifteen() -> Int {
    var y = 10
    func add() {
        y += 5
    }
    add()
    return y
}
returnFifteen()

在Swift语言中,一个函数可以作为另一个函数的返回值。例如,如下所示的演示代码。

func makeIncrementer() -> (Int -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)

在Swift语言中,函数可以当做参数被传入到另一个函数中。例如,如下所示的演示代码。

func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}
func lessThanTen(number: Int) -> Bool {
    return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)

在Swift语言中,函数实际上是一种特殊的闭包,可以使用“{}”来创建一个匿名闭包。使用关键字“in”将参数和返回值类型声明与闭包函数体进行分离。例如,如下所示的演示代码。

numbers.map({
    (number: Int) -> Int in
    let result = 3 * number
    return result
})

在Swift语言中,有很多种创建闭包的方法。如果已知一个闭包的类型,比如作为一个回调函数,那么就可以忽略参数的类型和返回值。单个语句闭包会把语句的值当做结果返回。例如,如下所示的演示代码。

numbers.map({ number in 3 * number })

在Swift语言中,可以通过参数位置而不是参数名字来引用参数,这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数时,这个闭包可以直接跟在括号后面。例如,如下所示的演示代码。

sort([1, 5, 3, 12, 2]) { $0 > $1 }
相关文章
|
5天前
|
Swift UED
Swift 中使用闭包处理事件
【10月更文挑战第20天】使用闭包来处理事件在 Swift 编程中是一种非常常见和有效的方式。它提供了简洁、灵活和高效的解决方案,使我们能够更轻松地实现各种交互功能。通过深入理解闭包的原理和应用方法,我们可以更好地利用闭包来处理各种事件,提升应用的用户体验和开发效率。
|
4月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
59 7
|
5月前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
94 5
Swift开发——简单函数实例
|
6月前
Swift4.0判断本函数是否在其它类有相同的方法
Swift4.0判断本函数是否在其它类有相同的方法
42 0
|
6月前
|
存储 API Swift
【Swift开发专栏】Swift函数与闭包的实战应用
【4月更文挑战第30天】本文介绍了 Swift 中函数和闭包的实战应用。首先,函数的基本使用包括定义、参数与返回值、函数类型以及高级技巧如嵌套函数。接着,讨论了闭包的语法,包括无名函数、作为函数参数、简写形式和尾随闭包。最后,展示了函数和闭包在实战中的应用,如排序过滤集合和处理异步任务的回调。
45 0
|
6月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
115 1
|
6月前
|
Swift
Swift中的函数
Swift中的函数
42 1
|
6月前
|
存储 Swift
Swift中,函数和闭包
Swift中,函数和闭包
63 1
|
Swift
swift 闭包简写实际参数名$0、$1等理解
swift 闭包简写实际参数名$0、$1等理解
90 0
|
Swift iOS开发
23 Swift中如何定义和使用函数
Swift中如何定义和使用函数
87 0