Enumerations? Enum? 依囊?
哈囉!今天這篇文章要來跟大家談談swift當中的enumerations, 一樣也是自己拜讀過原廠手冊之後,稍作消化做點筆記,如果有錯誤的地方麻煩請指正,感恩!
— Enumeration (列舉)
你可以把它想成,我可以把相同種類的屬性擺在一個Enumeration當中,如果有需要的時候,我直接去呼叫他即可。例如說羅盤可能有四個方位North/South/East/West,那我們就可以透過enum與case等關鍵字來做宣告。

當然我們也可以縮寫成一行

熟悉了enum的語法之後,下一步就來介紹enum當中最主要的兩個功能
- Associated Value
我們可以定義enum當中的case可以帶有怎樣的屬性,定義好了之後,當我們去創建這個實體的時候,就必須初始化這些屬性。例如:我今天要創建一個資料的enumeration, 其中包含生日與性別,生日帶有三個屬性,分別是年/月/日都是整數型別,而性別則是只有字串型別。

我們可以透過switch statement來對其中的屬性指定變數名稱,然後我們就可以在之後去做使用,例如我把birthday的三個整數指派為year/month/day,然後把gender的字串指派為sex這個變數,然後將其印出。

這邊有一點需要注意,當我們透過switch來做enum的判斷的時候,必須走過全部的case,不然compiler會報錯。如果你只想針對其中一個case來做判斷,那麼你也可以加上default,來讓compiler判斷如果沒有找到特定的case時,需要執行怎樣的處理。
2. Raw Value
你可以把它想成,當我們把enumeration指定型別為Int之後,裡面的case就會自動生成一個屬性叫做rawValue, 預設第一個case為0,然後往後+1,當然我們也可以指定開始的數值,例如我現在創建一個比賽分速的計算方式,輸掉遊戲扣一分,平手不加不扣,勝利加一分。

我們也可以透過rawValue的方式,直接回到enumeration當中去取出當初宣告的case, 但是要記得,回傳的結果可能是一個case, 也可能我們傳入的rawValue可能根本不存在enum當中,這時回傳就會是nil。以下我透過optional binding來做判斷,並且輸入兩個數字來取出不同結果。


大概就是以上幾個方式跟大家分享,但如果你問我enum最主要會用來幹嘛,我會說如果我們今天有一個字串的變數,存放的字很長你又怕打算,這時候就可以透過enum來做定義一些名稱很長的變數,而之後我們使用enum的case就可以直接做判斷,而不用再透過字串比較的方式就完成,因為透過字串怕打錯麻XD