函数参数名称(Function Parameter Names)
函数参数都有一个外部参数名(external parameter name)和一个局部参数名(local parameter name)。外部 参数名用于在函数调用时标注传递给函数的参数,局部参数名在函数的实现内部使用。
指定外部参数名(Specifying External Parameter Names) 你可以在局部参数名前指定外部参数名,中间以空格分隔:
func someFunction(externalParameterName localParameterName:Int){
}
someFunction(externalParameterName: 3);
忽略外部参数名(Omitting External Parameter Names)
如果你不想为第二个及后续的参数设置外部参数名,用一个下划线( _ )代替一个明确的参数名。
func someFounction(firstParameterName:Int,_ secondParameter:Int){
}
someFounction(3, 4);
默认参数值,你可以在函数体中为每个参数定义默认值。当默认值被定义后,调用这个函数时可以忽略这个参数。
func somefunc(parameterWithDefault:Int = 12){
}
somefunc(6);
somefunc();
可变参数(Variadic Parameters)
一个 可变参数(variadic parameter) 可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数 可以被传入不确定数量的输入值。通过在变量类型名后面加入 (...) 的方式来定义可变参数。
一个函数最多只能有一个可变参数。
如果函数有一个或多个带默认值的参数,而且还有一个可变参数,那么把可变参数放在参数表的最后。
常量参数和变量参数(Constant and Variable Parameters)
函数参数默认是常量。试图在函数体中更改参数值将会导致编译错误。这意味着你不能错误地更改参数值。
但是,有时候,如果函数中有传入参数的变量值副本将是很有用的。你可以通过指定一个或多个参数为变量参
数,从而避免自己在函数中定义新的变量。变量参数不是常量,你可以在函数中把它当做新的可修改副本来使用。
对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数
调用的生命周期中。
输入输出参数(In-Out Parameters)
变量参数,正如上面所述,仅仅能在函数体内被更改。如果你想要一个函数可以修改参数的值,并且想要在这些 修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。
定义一个输入输出参数时,在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数 修改,然后被传出函数,替换原来的值。
输入输出参数和返回值是不一样的。上面的 swapTwoInts 函数并没有定义任何返回值,但仍然修改了 someIn t 和 anotherInt 的值。输入输出参数是函数对函数体外产生影响的另一种方式。