iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 22
0

身為 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的值直接被更改


上一篇
Day 21 - 狀態列 (Status Bar) 文字顏色的更改
下一篇
Day 23 – Swift 之 closure 語法
系列文
Swift 新手上路之30天復刻版型30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言