在输入输出参数之前,先说说变量参数和常量参数
变量可以修改,常量不可以修改,这是众所周知的事实。
函数中的参数,默认是 常量,所以想在函数体内修改参数的值,就会出现编译错误。所以,在定义函数时,需要将参数定义为变量
变量参数的定义方式:
定义变量参数的方法就是在参数名 前 加上 变量 修饰符 var
func sum(var num1:Int, num2:Int)->Int{
num1 = 10
return num1+num2
}
print(sum(100, num2: 2))
//12
变量参数只能在函数体内修改,如果我们让在函数体修改的参数,在函数体外任然生效。这时我们就需要定义输入输出函数
输入输出函数定义方式:
定义函数时,在参数名前加上 inout 关键字,这样我们就定义了一个输入输出参数
代码事例:
var boyName = "张大三"
var girlName = "李小七"
func exchange(inout boy:String ,inout girl:String){
let name = boy
boy = girl
girl = name
}
exchange(&boyName, girl: &girlName)
print("boyName is \(boyName) and girlName is \(girlName)")
//boyName is 李小七 and girlName is 张大三
通过没有返回值的 exchange 函数,将boyName 和 girlName 交换 。在调用函数之后再去打印boyName和girlName。发现在函数体内修改的参数,在函数体外依然生效。
需要注意的是,在调用含有输入输出参数的 函数 时,需要实参前加 & 。表示这个值可以被函数修改
注意:输入输出参数不能有默认值,不能是可变参数。如果一个参数被 inout 标记,这个参数就不能被 var 或 let 标记。
输入输出参数只是,实现函数体内修改 参数值,在函数体外依然生效的方式之一。我们还可以通过别的方式实现。例如:
var boyName = "张大三"
var girlName = "李小七"
func exchange(boy:String ,girl:String){
girlName = boy
boyName = girl
}
exchange(boyName, girl: girlName)
print("boyName is \(boyName) and girlName is \(girlName)")
//boyName is 李小七 and girlName is 张大三