2016-07-22 69 views

回答

2

枚舉是結構化的數據類型。他們可以有存儲value type性質(所以例如static性質),但他們不能有實例的屬性類似於對象會有。此外,計算出的屬性允許每枚枚舉的每個case返回不同的值,這通常會有所不同。

從蘋果文檔

值類型是一個類型,其值時,它被分配給一個 變量或常數,或當它被傳遞到功能被複制。

所有結構和枚舉是斯威夫特值類型。這意味着 任何結構和枚舉情況下,您創建和任意值 類型它們作爲屬性,是當他們在你的代碼中傳遞 周圍總是被複制。

因爲每次分配它們都會複製枚舉,所以它們不能包含實例變量,如reference type會。區別在於引用類型引用相同的實例而不是被複制。枚舉是的情況下定義因此它們的值將始終是相同的。

編輯:

結構和枚舉之間的一個重要區別是,結構可以有存儲性能。枚舉中的每個案例可以具有不同的關聯值,但枚舉類型的每個值都代表枚舉定義的單個案例。因此,根據定義,枚舉案不應該改變值。

STRUCT:值類型,可以有存儲屬性

枚舉:值類型,不能有存儲屬性

類:參考類型,已經存儲了屬性

+0

感謝對於這樣的快速回復,但我仍然有疑問,因爲背後有什麼技術原因。爲什麼他們不能擁有實例存儲的屬性? –

+1

編輯更多信息的答案 – Max

+0

由於結構也像枚舉值類型,但它們已存儲屬性。因此,根據你的答案,結構也不應該存儲實例屬性。如果我缺少一些東西,請糾正我。 –