swift中的枚舉( Enumerations )真的是太靈活了,感覺自己已經駕馭不了這匹野馬了?。
swift中的枚舉特點:
使用 enum 關鍵詞定義枚舉類型,這個和其它語言壹致 例如
typescript中定義枚舉:
swift中: 使用 case 關鍵詞來定義壹個新的枚舉成員
使用:
可以使用switch匹配單個枚舉值
作用:
示例:壹種商品有2種編碼方式進行追蹤:
有時候我們可能需要將枚舉中所有的case情況組成壹個集合,可以讓枚舉類型擴展 CaseIterable 協議。
另外swift通過 allCases 屬性暴露了枚舉類型中所有case 的集合:
註意 Xcode 10.0+ 版本才支持這個屬性
作為關聯值的替代選擇,枚舉成員可以被默認值(也稱為 原始值 )預填充, 這些原始值的類型必須相同
原始值的理解: 即定義枚舉的時候,把枚舉的類型也定義了,比如 enum Color: String , 定義其類型為 String 類型
和關聯值的區別:
示例:使用ASCII碼作為原始值的枚舉
當原始值類型為整型或者字符串類型時,不需要顯式的給每個枚舉成員設置原始值,swift會自動的為妳賦值
使用 rawValue 屬性可以訪問枚舉成員的原始值:
對 字符串類型 : 隱式的為該枚舉成員的名稱
如果枚舉類型使用了原始值, 自動獲取壹個初始化方法 (呵呵,什麽鬼),這個方法接收壹個 rawValue 的參數,參數類型即為原始值類型,返回值則是枚舉成員或 nil
另外, 原始值構造器是壹個可失敗構造器(failable initializer)
例如,調用構造器創建壹個新的枚舉實例
特點:
要操作具有遞歸性質的數據結構,使用遞歸函數事壹種直接的方式:
感覺這個這麽復雜,估計用到的地方也比較少,了解即可
因為枚舉類型是值類型,賦值壹般都是通過拷貝的方式,所以原來的值不會改變,swift中提供了 mutating 關鍵詞用來改變值類型的值
其結構大致如下