欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift枚舉的一些小用法總結(jié)

 更新時(shí)間:2019年07月04日 10:27:32   作者:即將成為型男的濤  
這篇文章主要給大家介紹了關(guān)于Swift枚舉的一些小用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Swift具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

在 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)快速排序算法的代碼示例

    Swift實(shí)現(xiàn)快速排序算法的代碼示例

    這篇文章主要介紹了Swift實(shí)現(xiàn)快速排序算法的代碼示例,首先利用分治法講解了快速排序的思路,需要的朋友可以參考下
    2016-07-07
  • 詳解在swift中實(shí)現(xiàn)NSCoding的自動(dòng)歸檔和解檔

    詳解在swift中實(shí)現(xiàn)NSCoding的自動(dòng)歸檔和解檔

    本篇文章主要介紹了在swift中實(shí)現(xiàn)NSCoding的自動(dòng)歸檔和解檔,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • swift 3.0 實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能

    swift 3.0 實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能

    這篇文章主要介紹了swift 3.0 實(shí)現(xiàn)短信驗(yàn)證碼倒計(jì)時(shí)功能的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • swift中defer的實(shí)際應(yīng)用小結(jié)

    swift中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-01
  • 分析Swift性能高效的原因

    分析Swift性能高效的原因

    絕大多數(shù)公司選擇Swift語(yǔ)言開(kāi)發(fā)iOS應(yīng)用,主要原因是因?yàn)镾wift相比Objc有更快的運(yùn)行效率,更加安全的類型檢測(cè),更多現(xiàn)代語(yǔ)言的特性提升開(kāi)發(fā)效率;這一系列的優(yōu)點(diǎn)使Swift語(yǔ)言的熱度越來(lái)越高。
    2020-10-10
  • swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解

    swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解

    這篇文章主要為大家介紹了swiftui開(kāi)發(fā)之padding默認(rèn)值設(shè)置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • swift自定義表格控件(UITableView)

    swift自定義表格控件(UITableView)

    這篇文章主要為大家詳細(xì)介紹了swift自定義表格控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • swift中defer幾個(gè)簡(jiǎn)單的使用場(chǎng)景詳解

    swift中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
  • 窺探Swift編程中的錯(cuò)誤處理與異常拋出

    窺探Swift編程中的錯(cuò)誤處理與異常拋出

    本文給大家整理些關(guān)于Swift編程中的錯(cuò)誤處理與異常拋出,本文介紹的非常詳細(xì),基于參考價(jià)值,特此分享腳本之家平臺(tái)供大家學(xué)習(xí)
    2016-02-02
  • Swift編程中的初始化與反初始化完全講解

    Swift編程中的初始化與反初始化完全講解

    這篇文章主要介紹了Swift編程中的初始化與反初始化完全講解,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11

最新評(píng)論