身為 swift 初心者,在寫程式之中常會遇到程式碼反覆做相同的動作,知道這裡可以寫個 function 給它,但是卻又不知道從何寫起(尤其是那些帶參數的),於是語法又得出來救援了,希望這些語法能夠喚醒那些沈睡中的記憶TT
###參數外部名稱(Argument Label)、參數內部名稱(Parameter Name)到底是要怎麼用?
func greet(person: String, hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", hometown: "Cupertino"))
貌似相同的參數 person 以及 hometown 其實分別是代表了內部名稱和外部名稱。在 func{} 中存取的參數是內部名稱; 而在呼叫 func()時的參數,則是外部名稱。
func greet(person: String, hometown: String) -> String {
//我是內部名
return "Hello \(person)! Glad you could visit from \(hometown)."
}
//我是外部名
print(greet(person: "Bill", hometown: "Cupertino"))
因為在定義函式時,宣告的其實是參數內部名稱,在這個情況下,swift 預設的參數外部名稱就等於參數內部名稱。
func greet(who person: String, hometown: String) -> String {
//我是內部名
return "Hello \(person)! Glad you could visit from \(hometown)."
}
//我是外部名
print(greet(who: "Bill", hometown: "Cupertino"))
若是將函式改寫成這樣,得到的結果是一樣的,但從這邊就比較清楚的能得知哪個是內部名稱又哪個是外部名稱。
###惱人的回傳值
猶記得剛看到函式的時候,除了內外參數名稱伴隨著程式碼不斷混亂出現以外,還加上一個看了惱人的回傳值,結果原來只是需要的時候再使用就好了(誰不是?)。如果定義一個函式去計算某個區間的總和且不回傳值,就算呼叫了兩次函式,也沒辦法將這兩次的結果也做計算,因此這時候就需要回傳值來幫忙了。
###What is typealias?
typealias = 替 type 取一個新的名稱
typealias score = Int
var myScore: score = 99
###What is inout?
可以直接更改呼叫函式時的參數
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
someInt以及anotherInt的值直接被更改