在輸入輸出參數之前,先說說變量參數和常量參數
變量可以修改,常量不可以修改,這是衆所周知的事實。
函數中的參數,默認是 常量,所以想在函數體內修改參數的值,就會出現編譯錯誤。所以,在定義函數時,需要將參數定義爲變量
變量參數的定義方式:
定義變量參數的方法就是在參數名 前 加上 變量 修飾符 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 張大三