close

Conditional Statements

我們會很常去判斷程式裡的一些條件是否成立,例如錯誤是否發生,或是因為數值高低而產生一些提醒訊息。Swift提供了兩種用在條件判斷的語法:if以及switch。

 

If

我們可以直接來看例子:

var tempeatureInFahrenheit = 30

if tempeatureInFahrenheit <= 32 {

    print("It's very code")

}

// 上面的判定是以華氏32度為基準,若低於32度則顯示現在很冷。

 

反過來說,高於32度則是另一個判定成立,我們可以用else:

if tempeatureInFahrenheit <= 32 {

    print("It's very code")

} else {

    print("It's not so cold")

}

 

若我們需要在高於32度的情況再判斷很熱的情況,則我們可再加上另一則條件,用else if處理:

 

if tempeatureInFahrenheit <= 32 {

    print("It's very hot")

} else if tempeatureInFahrenheit >= 86{

    print("It's not so cold")

} else {

    print("It's not so cold")

}

以上的程式讀起來就是:溫度若低於32度,表示現在很冷;若高於86度,則現在很熱;32~86之間的溫度則是剛剛好的。

<------32-----86------> 

  cold     warm    hot

 

Switch

Swift提供了滿強大的Switch供開發者使用,除了傳統的整數外,還可以判斷字元,字串,以及range跟tuples。

以下是switch的格式:

 

switch some value to consider {

    case value 1:

        respond to value1

    case value 2:

        respond to value2 

    case value 3:

        respond to value3

    default:

        otherwise, do something else

}

Switch裡面可以判斷很多情況的條件,可以用case來增加。直接看以下例子:

 

let myCharacter: Character = "a"

switch myCharacter {

    case "a", "e", "i", "o", "u":

        print("\(myCharacter) is a vowel")

    case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":

        print("\(myCharacter) is a consonant")

    default:

        print("\(myCharacter) is not a vowel or a consonant")

}

以上是判斷myCharacter是母音還是子音的情況。在多個條件的情況下,我們在用一個case用分號區隔,但是不能用case來分開,例如:

case "a", "e", "i", "o", "u":

    print("\(myCharacter) is a vowel") 

//正確寫法

 

case "a":

case "e":

case "i":

case "o":

case "u":

    print("\(myCharacter) is a vowel")

// 編譯的時候就會錯誤,因為每個case 都要有相對應的statement。傳統的C可以這樣寫,但Swift不行。

 

Interval Matching

在Switch裡,case的值可以檢查包在裡面的區間:

 

let myScore = 85

var theResult: String

switch myScore {

    case 0..<60:

        theResult = "D"

    case 60..<70:

        theResult = "C"

    case 70..<80:

        theResult = "B"

    case 80..<90:

        theResult = "A"

    case 90...100:

        theResult = "A+"

    default:

       theResult = "C"

}

//以上的程式碼會判斷myScore落在case的區間為何,一開始的設定為85分,因此myResult的結果會是A

 

以下是結合tuples的例子:

let myPoint:(xAxis:Int yAxis:Int) = (1, 1)

switch myPoint {

case(0, 0):

    print("origin")

case (_, 0)

    print("on the x-axis")

case(0, _):

    print("on the y-axis")

case(-2...2, -2...2):

    print("in the box")

default:

    print("not in the box")

}

//此例子為判斷坐標是否在-2<= x <= 2, -2<= y <= 2裡,並判斷特別的位置比如原點以及坐標軸上。

要注意的是,在Swift裡,case會以第一個判定到的為主。上面的例子,原點(0, 0)會符合所有的判斷,但因為我們把原點的判定寫在第一個,因此不會輸出其他的字串。

 

Switch跟tuples還有另一種應用可以結合:Value Bindings

在上面的例子裡,我們可以用 case(_, 0) 來判斷是否在x坐標上;而這種情況下我們可以綁定一個常數/變數讓我們能夠在特定的case裡使用x的值:

case(let x, 0):

雖然我們一樣可以直接使用myPoint.0或是myPoint.xAxis來取值,但這種情況下結合value binding可以讓程式碼更簡潔和易讀。

 

而value binding還可以再結合where做更進一步的判定,如:

case let (x, y) where x == y:

這行程式指的是,當我的x坐標跟y坐標相同時判定成功。

arrow
arrow
    全站熱搜

    Eason 發表在 痞客邦 留言(0) 人氣()