Swift 函数学习笔记

在 Swift 中,函数是一等公民,它们可以像其他数据类型一样被使用和传递。函数可以定义在全局作用域、类、结构体等地方。

函数定义

Swift 中函数的定义语法如下:

swiftCopy Code
func functionName(argumentLabel parameterName: ParameterType) -> ReturnType { // 函数体 }

其中,argumentLabel 是参数的标签,为调用函数时使用的参数名;parameterName 是参数的名称,为函数内部使用的参数名。

下面是一个简单的函数示例:

swiftCopy Code
func greet(name: String) -> String { return "Hello, \(name)!" }

这个函数接收一个 name 参数,返回一个字符串类型的问候语。我们可以这样调用它:

swiftCopy Code
let greeting = greet(name: "Binjie") print(greeting)

输出:Hello, Binjie!

函数参数

Swift 中函数的参数支持默认值、可变参数等特性。

默认值参数

我们可以通过在参数类型后面加上赋初值的方式来指定默认参数。

swiftCopy Code
func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) { // 函数体 }

当我们调用该函数只传入一个参数的时候,parameterWithDefault 的值将自动被设置为默认值 12

可变参数

如果我们预先无法确定函数需要多少个参数,我们可以使用可变参数。

swiftCopy Code
func arithmeticMean(_ numbers: Double...) -> Double { var total: Double = 0 for number in numbers { total += number } return total / Double(numbers.count) }

在调用函数时,我们可以传入任意数量的参数。

swiftCopy Code
arithmeticMean(1, 2, 3, 4, 5)

输出:3.0

函数类型

在 Swift 中,函数也是一种数据类型。我们可以给函数定义一个类型,然后在其他地方使用它。

swiftCopy Code
func addTwoInts(_ a: Int, _ b: Int) -> Int { return a + b } var mathFunction: (Int, Int) -> Int = addTwoInts

在上面的代码中,我们定义了一个函数 addTwoInts,它接收两个整型参数并返回它们的和。我们还定义了一个叫做 mathFunction 的变量,它是一个拥有两个整型参数并返回一个整型结果的函数类型。

我们可以像调用普通函数一样调用这个函数类型的变量。

swiftCopy Code
mathFunction(3, 4)

输出:7

嵌套函数

Swift 允许我们在函数内部定义函数,称之为嵌套函数。

swiftCopy Code
func chooseStepFunction(backward: Bool) -> (Int) -> Int { func stepForward(input: Int) -> Int { return input + 1 } func stepBackward(input: Int) -> Int { return input - 1 } return backward ? stepBackward : stepForward } var currentValue = 3 let moveNearerToZero = chooseStepFunction(backward: currentValue > 0) while currentValue != 0 { print("\(currentValue)...") currentValue = moveNearerToZero(currentValue) }

在这个例子中,我们定义了两个嵌套函数 stepForwardstepBackward,它们都接收一个整型参数并返回一个整型结果。然后我们定义了一个选择函数的函数 chooseStepFunction,它根据传入的参数返回相应的嵌套函数。

最后我们将 moveNearerToZero 变量赋值为返回的函数。在后面的代码中,我们通过调用这个变量实现了数值逐渐减小的过程。