前言
我記得我在閱讀100 Days of Swift的時候,經常會把Switch Case跟枚舉(Enum)兩者搞混,但我想是時候應該做一點區分:
- Switch Case是一種條件運算方式
- Enum是一種資料儲存的方式
雖然兩者真的長的TM像,都會列出很多東西…很多條件,基於如此,本篇文章會簡單、簡短的做兩者的比較。並在最後的時候,補充所謂的「範圍運算子」。
正文
Switch case到底在幹什麼呢?要我形容,它就是一個多條件同時判斷的判斷式,網路上有相關評測大概是有提到if…else跟Switch case到底哪個比較耗時,結論是if…else比較耗時。(前提是跑類似內容的東西,我不知道我這樣講好不好)
1.Switch Case
如下面所說的,Switch case一次就會描述所有的條件,然後,還會追加一個條件叫做默認條件(default),基本上Switch case在運作的時候,只要匹配到第一個符合條件的項目,就會結束整個程式,這也就是它跟if…else相比快的地方。

Switch case在寫的時候,必須注意幾件事情:
- 條件有沒有窮盡?case必須窮盡所有情形。
- 一定要有default的情況,否則程式會有問題。
switch case也有一種方式可以宣告暫時性的常數或變數(引自SoJ的文章),並進行條件限制上的制定:

2.枚舉Enum
枚舉有一個很大用處,是讓使用者可以自己定義一組的值,讓你可以在定義好的情況下使用這些值。
而枚舉這個儲存方式,也算是一個頗多支援的語法,如:
- 計算屬性(computed property)
- 實體方法(instance method)
- 定義建構器(initialize)
- 擴展(extension)
- 協定(protocol)
兩者比較之下,枚舉跟Switch case兩者在目的上的意義完全不一樣,枚舉算是一個多功能描述資料的方式,而Switch case則是一種流程運算的方式,不過,既然稍微提到了枚舉的用法,這裡會再提到一些更深的概念:

枚舉的形式其實不只有一種,而可以呈現如下面這個樣子

假若你要在第二種形式中進行隱式指派(implicitly assigned raw value),那麼會變成這樣:

要記得在week後面加上Int型別,就可以這樣使用。
那假若今天在枚舉中,你想要把同樣的名稱只派給其他枚舉的內容的話,就不用再額外的提到一次枚舉的名稱了,如下面這個例子,week的內容在轉為Tuesday的時候,就只需要.Tuesday就足夠了:

不過,要說枚舉跟Switch case沒有關係,也不能完全這麼說,假若跟Swift的語句配合起來用的話,會變成下面這個樣子:

總之,上述Switch也可以用這種方式快速的匹配Enum設定過的內容。
補充:範圍運算子(Range operator)
範圍運算子這件事情其實是一個很簡單的功能,假如以Switch case來做例子:

範圍運算子大概可以這樣說,引自100 Days of Swift:
..<
is the half-open range that specifies “up to but excluding”(直至但不包括)...
is the closed range operator that specifies “up to and including”(直到並包括).
這兩種用法很經常的出現在要描述「從…到…」這樣的語句,而上述這兩種就是一種對於包括或不包括某個項目的說法。