Swift語言中爲外部參數設置默認值可變參數常量參數變量參數輸入輸出參數

Swift語言中爲外部參數設置默認值可變參數常量參數變量參數輸入輸出參數

7.4.4  爲外部參數設置默認值

開發者也能夠對外部參數設置默認值。這時,調用的時候,也能夠省略參數傳遞本文選自Swift1.2語言快速入門v2.0swift

【示例7-11】如下的代碼就爲外部參數toStringwithJoiner設置了默認的參數"Swift""---"。代碼以下:性能優化

  • import Foundation函數

  • func join(string s1: String, toString s2: String="Swift", withJoiner joiner:String="---"){性能

  •         println("\(s1)\(joiner)\(s2)")優化

  • }ui

  • join(string:"Hello")spa

因爲toStringwithJoiner已經設置了默認值,因此調用的時候就省略對兩個參數的傳值。運行結果以下所示:.net

  • Hello---Swiftorm

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)

運行結果以下所示:

  • 3.0

  • 10.0

在使用可變參數時,須要注意如下幾點:

1.只有一個可變參數

在一個函數中,可變參數只能夠有一個。不然,就會出現錯誤。以下代碼:

  • func average(numbers: Double...,aa:Int...){

  •   

  • }

在一個函數中出現了兩個可變參數numberaa,致使程序出現了以下的錯誤提示信息:

  • '...' 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  輸入-輸出參數

以上所講的參數只能夠在函數自己內改變。例如如下的代碼,想要實現對ab數值的交換。代碼以下本文選自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=2

  • b=3

交換後

  • 函數體內:a=3

  • 函數體內:b=2

  • a=2

  • b=3

在運行結果中能夠看到,ab的值可在函數自己內實現了交換。若是開發者想用一個函數來修改參數的值,而且想讓這些變化在函數調用後仍然有效。這時,須要定義輸入-輸出參數。它的定義是經過在參數名前加入inout關鍵字。其語法形式以下:

  • func 函數名(inout 參數名數據類型……) {

  •    

  • }

輸入-輸出參數都有一個傳遞給函數的值,將函數修改後,再從函數返回來替換原來的值。其調用形式以下:

  • 函數名(&參數……)

其中,參數前面加上&操做符。

【示例7-13】如下的代碼使用輸入輸出參數實現ab數值的交換功能。代碼以下:

  • 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)")

運行結果以下:

交換前

  • a=2

  • b=3

交換後

  • a=3

  • b=2

注意:若是一個函數的參數是輸入-輸出參數,在調用時,必須在參數前加一個「&」符號,不然程序就會出現錯誤。如如下代碼,在調用具備輸入輸出得函數時,在參數前沒有添加「&」符號。代碼以下:

  • 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

相關文章
相關標籤/搜索