標籤:
Swift語言中為外部參數設定預設值可變參數常量參數變數參數輸入輸出參數7.4.4 為外部參數設定預設值
開發人員也可以對外部參數設定預設值。這時,調用的時候,也可以省略參數傳遞本文選自Swift1.2語言快速入門v2.0。
【樣本7-11】以下的代碼就為外部參數toString、withJoiner設定了預設的參數"Swift"和"---"。代碼如下:
- import Foundation
- func join(string s1: String, toString s2: String="Swift", withJoiner joiner:String="---"){
- println("\(s1)\(joiner)\(s2)")
- }
- join(string:"Hello")
由於toString和withJoiner已經設定了預設值,所以調用的時候就省略對兩個參數的傳值。運行結果如下所示:
7.4.5 可變參數
使用可變參數,可以使一個參數接受零個或多個指定類型的值。設定一個可變參數需要在參數類型名後添加“...”本文選自Swift1.2語言快速入門v2.0。
【樣本7-12】下面代碼使用可變參數計算任一數字的算術平均值。代碼如下:
- import Foundation
- func average(numbers: Double...){
- var total: Double = 0
- for number in numbers {
- total += number
- }
- println(total/Double(numbers.count))
- }
- average(1, 2, 3, 4, 5)
- average(3, 8, 19)
運行結果如下所示:
在使用可變參數時,需要注意以下幾點:
1.只有一個可變參數
在一個函數中,可變參數只可以有一個。否則,就會出現錯誤。如下代碼:
- func average(numbers: Double...,aa:Int...){
- …
- }
在一個函數中出現了兩個可變參數number和aa,導致程式出現了如下的錯誤提示資訊:
- ‘...‘ must be on the last parameter
2.可變參數必須放在最後
可變參數不管在什麼時候都必須放在所有參數之後,即作為最後一個參數。否則,就會出現錯誤,如下代碼:
- func average(numbers: Double...,aa:Int){
- …
- }
在此代碼中可變參數numbers放在了aa參數之前,導致程式出現了如下的錯誤資訊:
- ‘...‘ must be on the last parameter
7.4.6 常量參數和變數參數
在函數中,參數預設都是常量。如果想要改變一個函數參數的值,會引起程式錯誤。如以下代碼:
- func fun(num:Int){
- num=num+1
- println(num)
- }
在此代碼中,函數參數num預設是一個常量,而常量的值是不能改變的,所以導致程式出現如下的錯誤資訊
- Cannot assign to ‘let‘ value ‘num‘
如果想要對參數進行修改,必須要使用一個類似於變數的參數,Swift稱之為變數參數。變數參數的定義就是在參數名前使用一個var關鍵字。以下的代碼就是使用了變數參數實現了字串靠右對齊的功能。代碼如下:
- import Foundation
- func alignRight(var string: String, cou: Int, pad: String) {
- var sc=count(string)
- let amountToPad = cou - sc //擷取輸入"*"的個數
- //遍曆
- for _ in 1...amountToPad {
- string = pad + string
- }
- println(string)
- }
- let originalString1 = "swift"
- alignRight(originalString1, 10, "*")
- let originalString2 = "Hi"
- alignRight(originalString2, 10, "*")
- let originalString3 = ""
- alignRight(originalString3, 10, "*")
運行結果如下所示:
- *****swift
- ********Hi
- **********
注意:變數參數只能存在於函數調用的生命週期中。
7.4.7 輸入-輸出參數
以上所講的參數只可以在函數本身內改變。例如以下的代碼,想要實現對a和b數值的交換。代碼如下本文選自Swift1.2語言快速入門v2.0:
- import Foundation
- func swapTwoInt(var number1: Int, var number2: Int) {
- //實現兩個整數的交換
- let temp = number1
- number1 = number2
- number2 = temp
- println("函數體內:a=\(number1)")
- println("函數體內:b=\(number2)")
- }
- var a=2
- var b=3
- println("交換前")
- println("a=\(a)")
- println("b=\(b)")
- println("交換後")
- swapTwoInt(a, b)
- println("a=\(a)")
- println("b=\(b)")
運行結果如下所示:
交換前
交換後
- 函數體內:a=3
- 函數體內:b=2
- a=2
- b=3
在運行結果中可以看到,a和b的值可在函數本身內實現了交換。如果開發人員想用一個函數來修改參數的值,並且想讓這些變化在函數調用後仍然有效。這時,需要定義輸入-輸出參數。它的定義是通過在參數名前加入inout關鍵字。其文法形式如下:
- func 函數名(inout 參數名: 資料類型, ……) {
- …
- }
輸入-輸出參數都有一個傳遞給函數的值,將函數修改後,再從函數返回來替換原來的值。其調用形式如下:
其中,參數前面加上&操作符。
【樣本7-13】以下的代碼使用輸入輸出參數實現a和b數值的交換功能。代碼如下:
- import Foundation
- func swapTwoInt(inout number1: Int, inout number2: Int) {
- //實現兩個整數的交換
- let temp = number1
- number1 = number2
- number2 = temp
- }
- var a=2
- var b=3
- println("交換前")
- println("a=\(a)")
- println("b=\(b)")
- println("交換後")
- swapTwoInt(&a, &b)
- println("a=\(a)")
- println("b=\(b)")
運行結果如下:
交換前
交換後
注意:如果一個函數的參數是輸入-輸出參數,在調用時,必須在參數前加一個“&”符號,否則程式就會出現錯誤。如以下代碼,在調用具有輸入輸出得函數時,在參數前沒有添加“&”符號。代碼如下:
- import Foundation
- func swapTwoInt(inout number1: Int, inout number2: Int) {
- ……
- }
- var a=2
- var b=3
- ……
- swapTwoInt(a, b)
- ……
由於在函數,調用時沒有在參數前添加“&”符號,導致程式出現了以下的錯誤本文選自Swift1.2語言快速入門v2.0:
- Passing value of type ‘Int‘ to an inout parameter requires explicit ‘&‘
注意:在Swift 1.2中有一個新的屬性“@noescape”可以用在函數中,這意味著這個參數是唯一可被調用的(或者用在函數調用時以參數的方式出現),其意思是它的生命週期比函數調用的周期短,這有助於一些小的效能最佳化本文選自Swift1.2語言快速入門v2.0。
Swift語言中為外部參數設定預設值可變參數常量參數變數參數輸入輸出參數