Enumerations? Enum? 依囊?

Journey on programming
4 min readJun 18, 2017

哈囉!今天這篇文章要來跟大家談談swift當中的enumerations, 一樣也是自己拜讀過原廠手冊之後,稍作消化做點筆記,如果有錯誤的地方麻煩請指正,感恩!

— Enumeration (列舉)

你可以把它想成,我可以把相同種類的屬性擺在一個Enumeration當中,如果有需要的時候,我直接去呼叫他即可。例如說羅盤可能有四個方位North/South/East/West,那我們就可以透過enum與case等關鍵字來做宣告。

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

熟悉了enum的語法之後,下一步就來介紹enum當中最主要的兩個功能

  1. 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來做判斷,並且輸入兩個數字來取出不同結果。

rawValue存在,所以取出結果
rawValue不存在,所以回傳nil

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

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Journey on programming
Journey on programming

Written by Journey on programming

Software Developer at 91APP. If you like my articles, please clap and follow me on Medium. Never stay still, never plateau!

No responses yet

Write a response