Swift枚舉的一些小用法總結(jié)
前言
在 Swift 中,枚舉是一個(gè)非常方便也非常強(qiáng)大的類型。我們?cè)谌粘J褂弥幸步?jīng)常會(huì)使用到它。
例如,我們最常見(jiàn)的 optional:
enum Optional<T> { case Some(T) case None }
這里不準(zhǔn)備介紹枚舉的基本用法,只是記錄兩個(gè)比較好用的枚舉用法。
關(guān)聯(lián)值
關(guān)聯(lián)值是將額外信息附加到 enum case 中的一種極好的方式。
例如,當(dāng)我們需要將一系列的值傳到下一個(gè)類中時(shí),一般情況下我們像下方代碼一樣寫出幾個(gè)設(shè)置的方法:
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?) { } }
這樣當(dāng)需要傳的值變多時(shí),代碼無(wú)疑就會(huì)變得沒(méi)那么好看了。我們可以用枚舉來(lái)簡(jiǎn)化:
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) } } }
利用枚舉關(guān)聯(lián)值之后,咱們的代碼馬上就簡(jiǎn)潔了不少。
自定義枚舉類型
平常我們使用枚舉時(shí),我們?cè)跒槊杜e定義 value 時(shí),一般就只用了幾種基本的類型:
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é)議,并實(shí)現(xiàn)協(xié)議的一些屬性及方法:
/* 將枚舉的 RawValue 關(guān)聯(lián)為自己希望的類型 **/ associatedtype RawValue /* 利用自己關(guān)聯(lián)的類型生成枚舉的實(shí)例 **/ init?(rawValue: Self.RawValue) /* 將自己定義的類型的作為 RawValue 返回 **/ var rawValue: Self.RawValue { get }
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
詳解在swift中實(shí)現(xiàn)NSCoding的自動(dòng)歸檔和解檔
本篇文章主要介紹了在swift中實(shí)現(xiàn)NSCoding的自動(dòng)歸檔和解檔,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03swift 3.0 實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能
這篇文章主要介紹了swift 3.0 實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能的相關(guān)資料,需要的朋友可以參考下2017-02-02swift中defer的實(shí)際應(yīng)用小結(jié)
這篇文章主要給大家介紹了關(guān)于swift中defer的實(shí)際應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解
這篇文章主要為大家介紹了swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景詳解
在Swift 2.0中,Apple提供了defer關(guān)鍵字,讓我們可以實(shí)現(xiàn)同樣的效果,這篇文章主要介紹了關(guān)于swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用defer具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧。2018-03-03