Swift 例舉 字典 元組

史丹佛 Swift iOS 開發筆記五:例舉、字典與元組

例舉 Enum 是什麼?什麼時候使用 Enum?

例舉 Enum 是一種自訂型別,允許你創建包含基本型別與方法 (method) 的自訂型別。它最大的特點是,你可以任擇其一來使用。也就是說,你的變數裡有時會是一種東西,有時又是另外一東西不同型別的東西時,就可以使用 enum。在計算器的例子裡,輸入陣列裡存的有時會是數字,有時會是運算符號,完全不一樣的東西,要放在一起的話就要用 enum。

上例中, enum 裡包含三種不同資料,

一種是 Operand ,屬於 Double 型別。

第二種是 UnaryOperation,它包含了一個 String ,以及一個函數 (Double -> Double) 。

第三種是 UnaryOperation,它也包含一個 String 及一個函數,只是它的函數接受兩個 Double 參數。

opStack 裡面每一個元素存放的資料可能是這三種中的其中一種。

再來看一下如何新增資料到 opStack 裡:

其中上面的函數參數在最後,可以把它們抽出,放在括號外面

再者,我們傳入一個函數來做開根號,但其實 Sqrt 本身就是一個函數,
它接受一個 Double ,傳回一個 Double ,完全符合要求

另外,其實 * 本身也是一個函數,它可以接受兩個 Double 參數,並傳回一個 Double 值,
因此可以將 * 直接作為參數傳入

同理, + 也可以這樣做,但減號跟除號不行,因為把數字的順序是相反的。最後變成:

最後,可以給 emun 加入一個叫做 Printable 的協議 (Protocol),這個協議要求提供一個叫做 description 的 String 變數,以便外部列印,完整的 enum :

description 是唯讀的,所以只要完成 get 。

Swift 中字典 Dictionary 的宣告

字典的特徵是 Key 對應 Value。在 Swift 中可以這樣宣告:

更簡洁直觀的做法是:

Swift 的元組 Tuple

Tuple 是將兩個資料用小括號組合起來,例如:

例子中,將兩個 Double 變成一個 Tuple。你可以這樣調用這兩個值:

你也可以幫他們命名:

Tuple 可以作為傳回型別:

或是用 Tuple 來接傳回的 Tuple:

其他重點

  1. 陣列 (Array) ,字典 (Dictionary) 屬於結構 (Struct) 而不是類別 Class。結構與類別有兩大差異:
    1. 結構不可繼承 (Inherit),但類別可以
    2. 結構只傳值 (Pass by value),而類別是值參考 (Pass by reference)。也就是傳結構等於複製它一遍;而傳類別等於把它本尊傳過去。
  2. 下劃線 ( _ ) 代表不理這個參數:

分享到: