Swift枚舉的一些小用法總結(jié)
前言
在 Swift 中,枚舉是一個非常方便也非常強大的類型。我們在日常使用中也經(jīng)常會使用到它。
例如,我們最常見的 optional:
enum Optional<T> {
case Some(T)
case None
}
這里不準備介紹枚舉的基本用法,只是記錄兩個比較好用的枚舉用法。
關(guān)聯(lián)值
關(guān)聯(lián)值是將額外信息附加到 enum case 中的一種極好的方式。
例如,當我們需要將一系列的值傳到下一個類中時,一般情況下我們像下方代碼一樣寫出幾個設(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?) { }
}
這樣當需要傳的值變多時,代碼無疑就會變得沒那么好看了。我們可以用枚舉來簡化:
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)值之后,咱們的代碼馬上就簡潔了不少。
自定義枚舉類型
平常我們使用枚舉時,我們在為枚舉定義 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 關(guān)聯(lián)為自己希望的類型
**/
associatedtype RawValue
/*
利用自己關(guān)聯(lián)的類型生成枚舉的實例
**/
init?(rawValue: Self.RawValue)
/*
將自己定義的類型的作為 RawValue 返回
**/
var rawValue: Self.RawValue { get }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Swift使用CollectionView實現(xiàn)廣告欄滑動效果
這篇文章主要為大家詳細介紹了Swift使用CollectionView實現(xiàn)廣告欄滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06
Swift開發(fā)應(yīng)用中如何更方便地使用顏色詳解
這篇文章主要給大家介紹了關(guān)于Swift開發(fā)應(yīng)用中如何更方便地使用顏色的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-03-03
Swift利用CoreData實現(xiàn)一個通訊錄存儲詳解
這篇文章主要給大家介紹了關(guān)于Swift利用CoreData實現(xiàn)一個通訊錄存儲的相關(guān)資料,本文是大家學習coreDate的基礎(chǔ)問題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2017-12-12

