swift函数总结概述
函数命名格式:
func sayHello(personName: String) -> String {
let greeting = "Hello, " + personName + "!"
return greeting
}
说明:以 func 作为前缀。指定函数返回类型时,用返回箭头 ->(一个连字符后跟一个右尖括号)后跟返回类型的名称的方式来表示。
调用:
print(sayHello("Anna"))
// prints "Hello, Anna!”
无参函数:
func sayHelloWorld() -> String {
return "hello, world"
}
print(sayHelloWorld())
// prints "hello, world”
说明:
尽管这个函数没有参数,但是定义中在函数名后还是需要一对圆括号。当被调用时,也需要在函数名后写一对圆括号。
多个参数:
func halfOpenRangeLength(start: Int, end: Int) -> Int {
return end - start
}
print(halfOpenRangeLength(1, 10))
// prints “9"
无返回值函数:
func sayGoodbye(personName: String) {
print("Goodbye, \(personName)!")
}
sayGoodbye("Dave")
// prints "Goodbye, Dave!”
因为这个函数不需要返回值,所以这个函数的定义中没有返回箭头(->)和返回类型。
多重返回值函数
你可以用元组(tuple)类型让多个值作为一个复合值从函数中返回。
func minMax(array: [Int]) -> (min: Int, max: Int) {
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)
}
调用
let bounds = minMax([8, -6, 2, 109, 3, 71])
print("min is \(bounds.min) and max is \(bounds.max)")
// prints "min is -6 and max is 109”
需要注意的是,元组的成员不需要在函数中返回时命名,因为它们的名字已经在函数返回类型中有了定义。
可选元组返回类型
如果函数返回的元组类型中有可能在整个元组中含有“没有值”,你可以使用可选的(Optional) 元组返回类型反映整个元组可以是nil的事实.你可以通过在元组类型的右括号后放置一个问号来定义一个可选元组,例如(Int,Int)?或(String,Int,Bool)?
注意: 可选元组类型如(Int,Int)?与元组包含可选属性如(Int?,Int?)是不同的.可选的元组类型,整个数组是可选的,而不只是元组中的每个元素值.
前面的minMax(_:)函数返回了一个包含两个Int值的元组.但是函数不会在数组中执行任何安全检查,如果array参数有一个空数组,如上定义的minMax(_:)在试图访问array[0]时会触发一个运行时错误.
为了安全的处理这个”空数组"问题,写一个minMax(_:)函数使用可选元组返回类型,并且当数组为空时返回nil:
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)
}
你可以选择性的绑定当minMax(_:)函数返回的是一个实际的元组值还是nil
if let bounds = minMax([8, -6, 2, 109, 3, 71]) {
print("min is \(bounds.min) and max is \(bounds.max)")
}
// prints "min is -6 and max is 109”
默认参数值
func someFunction(parameterWithDefault: Int = 12) {
// function body goes here
// if no arguments are passed to the function call,
// value of parameterWithDefault is 42
}
someFunction(6) // parameterWithDefault is 6
someFunction() // parameterWithDefault is 12
注意: 将带有默认值的参数放在函数参数列表的最后。这样可以保证在函数调用时,非默认参数的顺序是一致的,同时使得相同的函数在不同情况下调用时显得更为清晰。
可变参数
一个可变参数(variadic parameter)可以接受零个或多个值。函数调用时,你可以用可变参数来传入不确定数量的输入参数。通过在变量类型名后面加入(...)的方式来定义可变参数。
传入可变参数的值在函数体内当做这个类型的一个数组。例如,一个叫做 numbers 的 Double... 型可变参数,在函数体内可以当做一个叫 numbers 的 Double[] 型的数组常量。