Swift 1.1語言函數參數的特殊狀況本地參數名外部參數名

Swift 1.1語言函數參數的特殊狀況本地參數名外部參數名

7.4  函數參數的特殊狀況

聲明定義有參函數時,爲函數的每個參數都定義了參數名稱。根據參數名定義的形式不一樣,函數參數包括本地參數和外部參數名兩種本文選自swift入門很簡單。swift

7.4.1  本地參數名

本地參數名就是定義函數名時,在參數列表中所寫的參數名,它只能夠在函數主體內使用。如如下的一個代碼片斷,它定義了一個函數名爲fun的函數,在此函數的參數列表中定義的就是本地參數名文選自swift入門很簡單函數

  • func fun(start:Int,end:Int,str:String){spa

  •   ……code

  • }orm

在以上的代碼中,定義的參數名startendstr都是本地參數名。它只能夠在函數自己的代碼中使用,在調用時就不能夠使用了。開發

7.4.2  外部參數名

在函數中,若是每個參數的目的不是很明確或者是含糊不清的,那麼對於其餘開發者來講,是很難理解參數的目的。例以下面的代碼,它是一個具備字符串鏈接功能的函數,代碼以下文選自swift入門很簡單字符串

  • func join(s1: String, s2: String, s3: String) {編譯器

  •     println("\(s1)\(s3)\(s2)")string

  • }it

  • join("hello","world",",")

對於這麼一個函數來講,參數s1s2s3只知道是三個字符串,可是涉及到每個參數的具體目的,就不是很容易理解了。爲了解決這一難題,Swift提供了外部參數名稱。外部參數和本地參數的定義是同樣的。可是若是開發者須要更好的表達參數的功能,須要在定義時使用外部參數名。外部參數名須要寫在本地參數名以前,並使用空格將其分開。它的通常形式以下:

  • func 函數名(外部參數名 本地參數名:數據類型){

  •   ……

  • }

對於外部參數名的函數,調用形式以下:

  • 函數名(外部參數名:參數值)

【示例7-7】如下示例爲具備字符串鏈接功能的函數定義外部參數。代碼以下:

  • func join(string s1: String,tostring s2: String, joiner s3: String) {

  •     println("\(s1)\(s3)\(s2)")

  • }

  • join(string: "Hello", tostring: "Swift", joiner: ",")

  • 其中,stringtostringjoiner都是外部參數名。運行結果以下:

  • Hello,Swift

  • Program ended with exit code: 0

這裏須要注意如下三點:

1)調用時使用外部參數:若是爲參數提供了一個外部參數名後,須要在調用該函數的同時使用外部參數名。不然,程序就會提示錯誤。例以下面的具備字符串鏈接功能的函數調用代碼文選自swift入門很簡單

  • join("Hello", "Swift",  ",")

因爲在上方的代碼中沒有使用外部參數名stringtostringjoiner,因此出現瞭如下的錯誤提示:

  • Missing argument labels 'string:tostring:joiner:' in call

2)參數的順序:使用外部參數名能夠很好的讓其餘開發者理解各個參數的目的,可是它的調用順序也必需要和定義聲明函數時的一致。例如如下代碼調用具備字符串鏈接功能的函數:

  • join(tostring: "Swift",string: "Hello", joiner: ",")

在聲明定義函數時參數的順序爲(string,tostring, joiner),而在調用時順序爲(tostring, string,joiner)。因爲順序不同,致使程序出現如下的錯誤信息:

  • Argument 'string' must precede argument 'tostring'

3)外部參數名稱的快速寫法:若是開發者想要爲函數的參數提供一個外部參數名,然而本地參數名已經使用了一個合適的名稱,這時就不須要再爲該參數寫相同的兩次名稱了。取而代之的是,寫一次名稱,並用一個「#」號做爲名稱的前綴。它會告訴編譯器,這裏使用該名稱做爲本地參數名和外部參數名。其通常的形式以下:

  • func 函數名(#本地參數名:數據類型){

  •   ……

  • }

【示例7-8】如下程序實現字符串鏈接功能,外部參數名的定義使用了「#」號。代碼以下文選自swift入門很簡單

  • import Foundation

  • func join(#string:String, #tostring: String, #withJoiner:String) {

  •     println("\(string)\(withJoiner)\(tostring)")

  • }

  • join(string: "hello", tostring: "world", withJoiner: ", ")

雖然定義的時候能夠使用「#」簡寫,可是調用的時候必須寫完整的外部參數名。

7.4.3  設定參數默認值

在定義函數的時候,能夠爲參數設定默認值。這樣,在調用的時候,就不用再傳遞該參數的值。

【示例7-9】如下的代碼就爲startend參數分別定義了默認值05,其功能是輸出05的數值。代碼以下:

  • import Foundation

  • //聲明定義函數

  • func fun(start:Int=0,end:Int=5){

  •     var i=start

  •     for i;i<=end;++i{

  •         println(i)

  •     }

  • }

  • fun()                                                                  //調用

代碼中,函數fun()調用的時候沒有傳遞任何參數值。這是因爲定義函數fun()時參數startend都有默認值,因此調用的時候就能夠不傳遞參數。運行結果以下所示文選自swift入門很簡單

  • 0

  • 1

  • 2

  • 3

  • 4

  • 5

  • Program ended with exit code: 0

注意:在使用默認值是須要注意如下幾點:

1)定義時,將使用默認值的參數放在函數的參數列表的末尾。這確保了調用函數時候, 不會由於省略參數值而影響不具有默認值的參數的順序。

2)調用時,若是參數的默認值已經被設置,能夠省略該參數的傳值。

3)若是開發者設定了默認值,但在調用時想要改變默認值,也能夠繼續賦值。

【示例7-10】如下代碼輸出38之間的數值,包括38。代碼以下:

  • import Foundation

  • func fun(start:Int=0,end:Int=3){

  •     var i=start

  •     for i;i<=end;++i{

  •         println(i)

  •     }

  • }

  • println("使用默認值範圍")

  • fun()

  • println("使用改變後的範圍")

  • fun(start:3,end:8)                                                                               //改變了默認值

在代碼中,第一次調用使用了參數的默認值,第二次調用改變了參數的默認值。運行結果以下文選自swift入門很簡單

  • 使用默認值範圍

  • 0

  • 1

  • 2

  • 3

  • 使用改變後的範圍

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • Program ended with exit code: 0

在爲參數設定默認值後,Swift會自動爲該參數提供了同名的外部參數名。若是調用時須要改變默認值,必須使用外部參數,不能直接賦值。不然,就會出現錯誤,如如下的代碼:

  • fun(3,8)

在此代碼中,對startend進行了直接賦值,因此致使程序錯誤,其錯誤信息以下所示文選自swift入門很簡單

  • Missing argument labels 'start:end:' in call

相關文章
相關標籤/搜索