Swift 函数学习笔记
在 Swift 中,函数是一等公民,它们可以像其他数据类型一样被使用和传递。函数可以定义在全局作用域、类、结构体等地方。
函数定义
Swift 中函数的定义语法如下:
swiftCopy Codefunc functionName(argumentLabel parameterName: ParameterType) -> ReturnType {
// 函数体
}
其中,argumentLabel
是参数的标签,为调用函数时使用的参数名;parameterName
是参数的名称,为函数内部使用的参数名。
下面是一个简单的函数示例:
swiftCopy Codefunc greet(name: String) -> String {
return "Hello, \(name)!"
}
这个函数接收一个 name
参数,返回一个字符串类型的问候语。我们可以这样调用它:
swiftCopy Codelet greeting = greet(name: "Binjie")
print(greeting)
输出:Hello, Binjie!
函数参数
Swift 中函数的参数支持默认值、可变参数等特性。
默认值参数
我们可以通过在参数类型后面加上赋初值的方式来指定默认参数。
swiftCopy Codefunc someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
// 函数体
}
当我们调用该函数只传入一个参数的时候,parameterWithDefault
的值将自动被设置为默认值 12
。
可变参数
如果我们预先无法确定函数需要多少个参数,我们可以使用可变参数。
swiftCopy Codefunc arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
在调用函数时,我们可以传入任意数量的参数。
swiftCopy CodearithmeticMean(1, 2, 3, 4, 5)
输出:3.0
函数类型
在 Swift 中,函数也是一种数据类型。我们可以给函数定义一个类型,然后在其他地方使用它。
swiftCopy Codefunc addTwoInts(_ a: Int, _ b: Int) -> Int {
return a + b
}
var mathFunction: (Int, Int) -> Int = addTwoInts
在上面的代码中,我们定义了一个函数 addTwoInts
,它接收两个整型参数并返回它们的和。我们还定义了一个叫做 mathFunction
的变量,它是一个拥有两个整型参数并返回一个整型结果的函数类型。
我们可以像调用普通函数一样调用这个函数类型的变量。
swiftCopy CodemathFunction(3, 4)
输出:7
嵌套函数
Swift 允许我们在函数内部定义函数,称之为嵌套函数。
swiftCopy Codefunc 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)
}
在这个例子中,我们定义了两个嵌套函数 stepForward
和 stepBackward
,它们都接收一个整型参数并返回一个整型结果。然后我们定义了一个选择函数的函数 chooseStepFunction
,它根据传入的参数返回相应的嵌套函数。
最后我们将 moveNearerToZero
变量赋值为返回的函数。在后面的代码中,我们通过调用这个变量实现了数值逐渐减小的过程。