Swift枚舉成員在創建時是完整的值,這些值的類型是明確定義的方向類型。它們不會被賦予像Objective-C這樣的默認整數值。在上面的方向示例中,東、西、北和南不會被隱式分配給0,1,2和3。
Swift中的枚舉更加靈活,不需要為每個枚舉成員提供值。如果向枚舉成員提供了壹個值(稱為原始值),則該值的類型可以是:字符串、字符、任意整數值或浮點類型。
Swift的枚舉類型提供了壹個名為RawValues的實現,該實現為枚舉項提供了壹個默認值,該值在編譯期間確定。
枚舉項所獲得的原始值是可選的,因此需要使用if let來做出判斷。
未指定枚舉值類型。
隱含原始值
隱式原始值下的枚舉項使用系統分配的值:
顯性原值
隱式+顯式原始值
這裏使用了屬性觀察器,Swift中的枚舉更像是壹個對象,因此使用屬性觀察器來監視枚舉值很方便。
在Swift中,您也可以定義這樣壹個枚舉類型,並且每個枚舉項都有壹個附加信息來擴展該枚舉項的信息表示,也稱為關聯值。
學會使用關聯值很重要。具體用法將在下面的第9節中詳細介紹。
壹般來說,枚舉很容易判斷相等。壹旦關聯值被添加到枚舉中,Swift就無法正確地進行比較,因此它需要為枚舉本身實現= =運算符。
在可比協議的幫助下,實現了枚舉的比較。
符合CaseIterable協議的Swift枚舉可以被遍歷,所有枚舉成員都是通過allCases獲得的。
如果app中的接口地址都放在壹起,不方便命名或查找,可以通過嵌套枚舉的方式進行設計。可以分散在多個文件中,方便維護和管理。
使用枚舉來管理系統中的常數是壹個不錯的選擇。
枚舉中不能使用存儲屬性,但可以使用計算屬性,計算屬性的內容從枚舉值或枚舉關聯值中獲取。
在這裏,您可以將enumeration視為壹個類,作為壹個成員方法引入,將AppleDeivce.iPhone視為AppleIdivece的壹個實例,將case視為其屬性。介紹的switch self實際上是遍歷這個匿名屬性的所有場景,比如iPad和iPhone,然後根據不同的場景返回不同的值。
妳可以做壹個自定義的枚舉構造函數。
系統的打印協議
讓枚舉符合此協議。
枚舉可以擴展。枚舉中的Case可以與方法/協議分離,讀者可以快速理解枚舉的內容。
設計壹個網絡類下的錯誤信息處理功能。
UserDefaults通常在項目中用於存儲簡單的用戶信息。但是鑰匙的維護不是很方便。我也不會記得。枚舉+結構可以很好地解決這個問題。
這樣設計APP的存儲模塊是不是更有層次更方便?
遞歸枚舉是將另壹個枚舉作為枚舉成員的關聯值的枚舉。當編譯器操作遞歸枚舉時,必須插入間接尋址層。您可以在聲明枚舉成員之前使用indirect關鍵字來表明它是遞歸的。還可以在整個枚舉之前聲明所有枚舉成員都是遞歸的。