Swift 1.1語言函式引數的特殊情況本地引數名外部引數名
Swift 1.1語言函式引數的特殊情況本地引數名外部引數名
7.4 函式引數的特殊情況
宣告定義有參函式時,為函式的每一個引數都定義了引數名稱。根據引數名定義的形式不同,函式引數包括本地引數和外部引數名兩種本文選自swift入門很簡單。
7.4.1 本地引數名
本地引數名就是定義函式名時,在引數列表中所寫的引數名,它只可以在函式主體內使用。如以下的一個程式碼片段,它定義了一個函式名為fun的函式,在此函式的引數列表中定義的就是本地引數名文選自swift入門很簡單。
- func fun(start:Int,end:Int,str:String){
- ……
- }
在以上的程式碼中,定義的引數名start、end、str都是本地引數名。它只可以在函式本身的程式碼中使用,在呼叫時就不可以使用了。
7.4.2 外部引數名
在函式中,如果每一個引數的目的不是很明確或者是含糊不清的,那麼對於其他開發者來說,是很難理解引數的目的。例如下面的程式碼,它是一個具有字串連線功能的函式,程式碼如下文選自swift入門很簡單:
- func join(s1: String, s2: String, s3: String) {
- println("\(s1)\(s3)\(s2)")
- }
- join("hello","world",",")
對於這麼一個函式來說,引數s1、s2、s3只知道是三個字串,但是涉及到每一個引數的具體目的,就不是很容易理解了。為了解決這一難題,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: ",")
- 其中,string、tostring、joiner都是外部引數名。執行結果如下:
- Hello,Swift
- Program ended with exit code: 0
這裡需要注意以下三點:
(1)呼叫時使用外部引數:如果為引數提供了一個外部引數名後,需要在呼叫該函式的同時使用外部引數名。否則,程式就會提示錯誤。例如下面的具有字串連線功能的函式呼叫程式碼文選自swift入門很簡單:
- join("Hello", "Swift", ",")
由於在上方的程式碼中沒有使用外部引數名string、tostring、joiner,所以出現了以下的錯誤提示:
- 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】以下的程式碼就為start和end引數分別定義了預設值0和5,其功能是輸出0到5的數值。程式碼如下:
- import Foundation
- //宣告定義函式
- func fun(start:Int=0,end:Int=5){
- var i=start
- for i;i<=end;++i{
- println(i)
- }
- }
- fun() //呼叫
程式碼中,函式fun()呼叫的時候沒有傳遞任何引數值。這是由於定義函式fun()時引數start和end都有預設值,所以呼叫的時候就可以不傳遞引數。執行結果如下所示文選自swift入門很簡單:
- 0
- 1
- 2
- 3
- 4
- 5
- Program ended with exit code: 0
注意:在使用預設值是需要注意以下幾點:
(1)定義時,將使用預設值的引數放在函式的引數列表的末尾。這確保了呼叫函式時候, 不會因為省略引數值而影響不具備預設值的引數的順序。
(2)呼叫時,如果引數的預設值已經被設定,可以省略該引數的傳值。
(3)如果開發者設定了預設值,但在呼叫時想要改變預設值,也可以繼續賦值。
【示例7-10】以下程式碼輸出3到8之間的數值,包括3和8。程式碼如下:
- 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)
在此程式碼中,對start和end進行了直接賦值,所以導致程式錯誤,其錯誤資訊如下所示文選自swift入門很簡單:
- Missing argument labels 'start:end:' in call
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1450608/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 4.2 函式的外部引數名 [Swift教程]函式Swift
- go語言獲取外部引數Go
- 函式引數 引數定義函式型別函式型別
- GO語言————6.7 將函式作為引數Go函式
- TypeScript 函式可選引數和預設引數TypeScript函式
- Python函式/動態引數/關鍵字引數Python函式
- SpringBoot 引數別名實現Spring Boot
- GO語言————6.2 函式引數與返回值Go函式
- Go語言Slice作為函式引數詳解Go函式
- 不重啟mysql情況修改引數變數MySql變數
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- 3.3.2 函式的預設引數和佔位引數 函式過載函式
- 正則特殊引數
- linux shell特殊引數Linux
- Spring AOP獲取攔截方法的引數名稱跟引數值Spring
- Swift 呼叫 Objective-C 的可變引數函式SwiftObject函式
- Python函式的位置引數、關鍵字引數精講Python函式
- python---函式引數、變數Python函式變數
- 如何透過AST樹去獲取JS函式引數名ASTJS函式
- 函式的引數傳遞函式
- 程式中的函式引數函式
- 函式、引數、解構函式
- 函式引數詳解函式
- Spring LocalVariableTableParameterNameDiscoverer獲取方法的引數名Spring
- jmeter 引數簽名不支援 TreeMapJMeter
- 對 “C語言指標變數作為函式引數” 的個人理解C語言指標變數函式
- Python語法—函式及引數傳遞Python函式
- Python3之函式的引數傳遞與引數定義Python函式
- Javascript函式引數求值——Thunk函式JavaScript函式
- 函式基礎和函式引數函式
- 函式的關鍵字引數函式
- 函式的呼叫方式和引數函式
- 封裝帶引數的函式封裝函式
- python sorted()函式的引數用法Python函式
- 揭秘 Go 中的函式引數Go函式
- Python函式引數總結Python函式
- JavaScript函式傳遞引數JavaScript函式
- 陣列作為函式引數陣列函式
- 函式中引數傳值函式