Swift語言中為外部引數設定預設值可變引數常量引數變數引數輸入輸出引數
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已經設定了預設值,所以呼叫的時候就省略對兩個引數的傳值。執行結果如下所示:
-
Hello---Swift
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...){
-
…
-
}
在一個函式中出現了兩個可變引數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=2
-
b=3
交換後
-
函式體內: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)")
執行結果如下:
交換前
-
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。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-1562247/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kettle 引數——變數引數和常量引數變數
- Swift學習筆記(三十三)——常量引數,變數引數和inout引數Swift筆記變數
- Swift: 可變引數Swift
- C#中的值引數,引用引數及輸出引數C#
- python疑問5:位置引數,預設引數,可變引數,關鍵字引數,命名關鍵字引數區別Python
- c#方法引數_輸出引數C#
- iOS可變引數(不定引數)的用法iOS
- c#基礎-5.變長引數和引數預設值C#
- TypeScript 函式可選引數和預設引數TypeScript函式
- 引數和變數變數
- 【Java】可變引數Java
- Java可變引數Java
- Java 可變引數Java
- Swift 1.1語言函式引數的特殊情況本地引數名外部引數名Swift函式
- 關鍵字引數與非關鍵字引數(可變引數)詳解
- Bash變數和引數變數
- 深入解析 ES6:Rest 引數和引數預設值REST
- Java方法04:命令列傳遞引數、可變引數Java命令列
- c# 方法引數_值引數C#
- go-可變引數Go
- 集合框架-可變引數框架
- Python可變引數Python
- 可變引數例項
- 利用可變長度引數定義一個函式,輸入為任意個數的數值,功能為對輸入資料求和並輸出;函式
- php函式之如何用預設引數和可變長度引數方式傳遞?PHP函式
- python變數和引數Python變數
- 全網最適合入門的物件導向程式設計教程:48 Python函式方法與介面-位置引數、預設引數、可變引數和關鍵字引數物件程式設計Python函式
- c# 方法引數(傳值,傳引用,ref,out,params,可選引數,命名引數)C#
- 全面輸出JVM配置引數JVM
- main命令列引數輸入AI命令列
- ES6 筆記 Rest 引數和 預設引數筆記REST
- 【重學Java】可變引數Java
- Java - 可變引數的使用Java
- c++可變模板引數C++
- Java方法05:可變引數Java
- javascript為函式設定預設引數JavaScript函式
- 陷阱!python引數預設值Python
- 【C++】引數的預設值C++