Swift枚舉的一些小用法總結
前言
在 Swift 中,枚舉是一個非常方便也非常強大的類型。我們在日常使用中也經(jīng)常會使用到它。
例如,我們最常見的 optional:
enum Optional<T> { case Some(T) case None }
這里不準備介紹枚舉的基本用法,只是記錄兩個比較好用的枚舉用法。
關聯(lián)值
關聯(lián)值是將額外信息附加到 enum case 中的一種極好的方式。
例如,當我們需要將一系列的值傳到下一個類中時,一般情況下我們像下方代碼一樣寫出幾個設置的方法:
struct MyStruct { var value: Int init(_ value: Int?) { if let val = value { self.value = val } else { self.value = Int(INT_MAX) } } } class Two { var value1: String? var value2: Int? var value3: MyStruct? func setValue1(value: String?) { } func setValue2(value: Int?) { } func setValue2(value: MyStruct?) { } }
這樣當需要傳的值變多時,代碼無疑就會變得沒那么好看了。我們可以用枚舉來簡化:
enum ValueBind { case bindStringValue(str: String) case bindIntValue(num: Int) case bindModel(model: MyStruct) } class Two { var value1: String? var value2: Int? var value3: MyStruct? func setValueBind(value: ValueBind) { switch value { case .bindStringValue(let str): print(str) case .bindModel(let model): print(model.value) case .bindIntValue(let num) print(num) } } }
利用枚舉關聯(lián)值之后,咱們的代碼馬上就簡潔了不少。
自定義枚舉類型
平常我們使用枚舉時,我們在為枚舉定義 value 時,一般就只用了幾種基本的類型:
enum Direction { case left case top case right case bottom } enum StringEnum: String { case hello = "hello" case world = "world" } enum IntEnum: Int { case one = 1 case two = 2 }
但是,如果我們需要在枚舉類型放入我們自定義的類型的話,我們就需要為枚舉加一些東西了。
enum CustomEnum: RawRepresentable { typealias RawValue = MyStruct case null case one case two init?(rawValue: MyStruct) { switch rawValue.value { case 1: self = .one case 2: self = .two default: self = .null } } var rawValue: MyStruct { switch self { case .one: return MyStruct(1) case .two: return MyStruct(2) default: return MyStruct(nil) } } }
我們讓枚舉遵守 RawRepresentable 協(xié)議,并實現(xiàn)協(xié)議的一些屬性及方法:
/* 將枚舉的 RawValue 關聯(lián)為自己希望的類型 **/ associatedtype RawValue /* 利用自己關聯(lián)的類型生成枚舉的實例 **/ init?(rawValue: Self.RawValue) /* 將自己定義的類型的作為 RawValue 返回 **/ var rawValue: Self.RawValue { get }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支持。
上一篇:沒有了
欄 目:Swift
下一篇:Swift中添加雙擊手勢識別器
本文標題:Swift枚舉的一些小用法總結
本文地址:http://mengdiqiu.com.cn/a1/Swift/11921.html
您可能感興趣的文章
- 01-11swift中defer幾個簡單的使用場景詳解
- 01-11Swift利用Decodable解析JSON的一個小問題詳解
- 01-11Swift中defer關鍵字推遲執(zhí)行示例詳解
- 01-11Swift中初始化init的方法小結
- 01-11Swift中定義單例的方法實例
- 01-11Swift利用純代碼實現(xiàn)時鐘效果實例代碼
- 01-11Swift中排序算法的簡單取舍詳解
- 01-11Swift如何為設置中心添加常用功能
- 01-11Swift Json實例詳細解析
- 01-11Swift利用指紋識別或面部識別為應用添加私密保護功能


閱讀排行
本欄相關
- 01-11Swift利用Decodable解析JSON的一個小問題
- 01-11swift中defer幾個簡單的使用場景詳解
- 01-11Swift中初始化init的方法小結
- 01-11Swift中defer關鍵字推遲執(zhí)行示例詳解
- 01-11Swift利用純代碼實現(xiàn)時鐘效果實例代碼
- 01-11Swift中定義單例的方法實例
- 01-11Swift中排序算法的簡單取舍詳解
- 01-11Swift Json實例詳細解析
- 01-11Swift如何為設置中心添加常用功能
- 01-11Swift利用指紋識別或面部識別為應用添
隨機閱讀
- 01-10C#中split用法實例總結
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改