6.函数
-
多重返回值函数:用元组(tuple)类型让多个值作为一个复合值从函数中返回
func minMax(array: [Int]) -> (min: Int, max: Int)? { if array.isEmpty { return nil } var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin, currentMax) }
函数参数标签和参数名称: 每个函数参数都有⼀一个参数标签(argument label)以及一个参数名(parameter name)。参数标签在调⽤用函数的时候使用;调用的时候需要将函数的参数标签写在对应的参数前面。参数名称在函数的实现中使用。默认情况下,函数参数使用参数名称来作为它们的参数标签。
忽略参数标签:如果你不希望为某个参数添加一个标签,可以使用一个下划线( _ )来代替一个明确的参数标签。
默认参数值:你可以在函数体中通过给参数赋值来为任意一个参数定义默认值(Deafult Value)。当默认值被定义后,调⽤这个函数时可以忽略这个参数。
可变参数:一个可变参数(variadic parameter)可以接受零个或多个值。函数调用时,你可以⽤可变参数来指定函数参数可以被传⼊不确定数量的输入值。通过在变量类型名后面加入( ... )的方式来定义可变参数。
-
输入输出参数:函数参数默认是常量。定义一个输入输出参数时,在参数定义前加 inout 关键字。
func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a=b b = temporaryA } 输⼊输出参数不能有默认值,而且可变参数不能用 inout 标记。
-
函数类型作为返回值,嵌套函数
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 = -4 let moveNearerToZero = chooseStepFunction(backward: currentValue > 0) while currentValue != 0 { print("\(currentValue)... ") currentValue = moveNearerToZero(currentValue) } print("zero!") // -4... // -3... // -2... // -1... // zero!