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

Swift 3.0 enum 的靈活使用介紹

 更新時間:2017年05月19日 09:59:47   作者:ManoBoo  
這篇文章主要介紹了Swift 3.0 enum 的靈活使用介紹,非常具有實用價值,需要的朋友可以參考下

1. 前言

一晃半年了,從之前的順豐優(yōu)選跳槽到現(xiàn)在的閃銀,都沒有時間好好寫文章,先進行自我批評,最近在忙開源項目,在造各種輪子的過程中,深深的體會到了Swiftenum的便利,直接上代碼。

2. Objective-C 中的enum

typedef NS_ENUM(NSUInteger, UserType) {
  UserTypeStudent,
  UserTypeTeacher,
  UserTypeStaff,
  UserTypeAdministrator,
  UserTypeOther
};

這是一段標準的Objective-C風(fēng)格的枚舉定義,聲明一個類型為NSUInteger的枚舉UserType,它有什么用呢, 多數(shù)情況下枚舉起的是解釋的作用,何為解釋?
來個實例:

  {
    "successful": true,
    "userType": 0 // 可能為其他的值
  }

后臺返回一串json,userType可能為1~9,踩過坑的猿們都明白,若是直接使用后臺返回的userType字段進行業(yè)務(wù)邏輯的處理,可能會出現(xiàn)牽一發(fā)而動全身的尷尬局面,這個既關(guān)乎代碼規(guī)范,也少給自己挖坑。

推薦的做法是,將返回的userType映射成枚舉,之后代碼中其他地方也可以調(diào)用,后臺如果userType對應(yīng)關(guān)系改變,我們也只需改與之對應(yīng)的枚舉映射

3. Swift 中的enum

使用過Objective-C中的枚舉,我們會發(fā)現(xiàn),有時候我們不想用基礎(chǔ)類型的枚舉,比如NSUInteger等等,我們想將typedef NS_ENUM(NSUInteger, UserType)NSUInteger改成NSString,但是系統(tǒng)不支持定義非基礎(chǔ)類型的枚舉,會報錯is an invaild underlying type,那就導(dǎo)致了枚舉使用不是那么靈活,我們來看看Swift中的枚舉

enum CIBlurStyle: String{
  case extraLight = "extraLight"
  case light   = "light"
  case dark    = "dark"

這是Swift中最基礎(chǔ)的枚舉用法,我們可以指定枚舉的類型,通過CIBlurStyle.extraLight.rawValue可以獲取到枚舉的原始值,此外我們還可以在枚舉中傳遞參數(shù),如:

enum CIBlurHUDType {
  case guide(Bool)
  case info(String)
  case error(Error)
  case other
}


func handleEnum(hudType: CIBlurHUDType) -> Void {
    switch hudType {
        case .guide(let isAutoHide):
          // 
        case .info(let tip):
          // 提示信息
        case .error(let error):
          // 對 `error` 做處理
        default:
          break
        }
}

// 如何使用
handleEnum(.info("這是一段提示文字~"))

let err = NSError.init(domain: "發(fā)生了一些不為人知的錯誤", code: 110, userInfo: nil)
handleEnum(.error(err))

4. Swift 中的enum如何靈活使用

4.1 利用enum精簡代碼

Swift中的enum使用非常方便,實例:

public enum CIImageOperation {
  case cornerRadius(CGFloat)
  case scale(CGSize)
  case zip(CGFloat)
  case other
}

我們想要造一個圖片請求庫,下載完可能會對圖片進行上面枚舉中的處理,不使用enum,我們可能會聲明很多方法,如:

extensin UIImageView {
  func setImage(with url: URL, cornerRadius: CGFloat) -> Void {}
  func setImage(with url: URL, scaleTo: CGSize) -> Void {}
  func setImage(with url: URL, zip: (Bool, CGFLoat)) -> Void {}
}

來,我們換一種寫法,看著更精簡

extension UIImageView {
  func setImage(with url: URL, imageOperation: CIImageOperation) -> Void {
    // 下載完圖片對圖片進行處理
    switch imageOperation {
        case .cornerRadius(let cornerRadius):
          // 切圓角
        case .scale(let size):
          // 尺寸縮放
        case .zip(let zipValue):
          // 圖片清晰度的壓縮比例
        default:
          break
        }
  }
}

// 使用
imagView.setImage(with url: "www.codeinventor.club", imageOperation: .cornerRadius(3.0))

4.2 利用enum對網(wǎng)絡(luò)請求結(jié)果等做簡單的package操作

enum CIUrlResponse {
  case Result(Any)
  case error(NSError)
}

通常在一個網(wǎng)絡(luò)請求完畢之后,會返回一系列response,利用enum可以傳遞參數(shù)的特性,我們可以使用enum對網(wǎng)絡(luò)請求進行包裝,使其更加直觀易懂,如下面這個func:

func getData(with url: URL) -> CIUrlResponse {}

注:enum 使用時傳參數(shù),很方便,但還是不建議傳太多參數(shù),或者過于復(fù)雜的Closure

舉個負面例子:

enum HUDStyle {
    case loading(Bool, CGFloat, CGFloat, String)
    case other(((Bool) -> ()))
  }

。。。不注釋根本看不懂這堆參數(shù)什么意思

So. Swift中的enum適合傳遞少量參數(shù),或者簡單的Closure,與function相比,enum承擔(dān)的更多的還是解釋的作用

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡單理解插入排序算法及Swift版的代碼示例

    簡單理解插入排序算法及Swift版的代碼示例

    插入排序算法可以在已排序的序列中將要插入的元素和原有元素保持有序,這里我們來簡單理解插入排序算法及Swift版的代碼示例,需要的朋友可以參考下
    2016-07-07
  • swift相冊相機的權(quán)限處理示例詳解

    swift相冊相機的權(quán)限處理示例詳解

    在iOS7以后要打開手機攝像頭或者相冊的話都需要權(quán)限,在iOS9中更是更新了相冊相關(guān)api的調(diào)用,那么下面這篇文章主要給大家介紹了關(guān)于swift相冊相機權(quán)限處理的相關(guān)資料,文中給出了詳細的示例代碼,需要的朋友可以參考下。
    2017-10-10
  • swift中自定義正則表達式運算符=~詳解

    swift中自定義正則表達式運算符=~詳解

    這篇文章主要給大家介紹了關(guān)于swift中自定義正則表達式運算符=~的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift簡單快速的動態(tài)更換app圖標AppIcon方法示例

    Swift簡單快速的動態(tài)更換app圖標AppIcon方法示例

    這篇文章主要為大家介紹了Swift動態(tài)更換app圖標AppIcon的簡單快速方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Swift中通知中心(NotificationCenter)的使用示例

    Swift中通知中心(NotificationCenter)的使用示例

    這篇文章主要給大家介紹了關(guān)于Swift中通知中心(NotificationCenter)使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • swift控件工廠類的實現(xiàn)代碼

    swift控件工廠類的實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了swift控件工廠類的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • SwiftUI中@ViewBuilder的相關(guān)知識點解密

    SwiftUI中@ViewBuilder的相關(guān)知識點解密

    IOS開發(fā)目前最主流的框架當(dāng)屬SwiftUI了,這篇文章主要給大家介紹了關(guān)于SwiftUI中@ViewBuilder的一些相關(guān)知識點,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-07-07
  • Swift實現(xiàn)簡易計算器功能

    Swift實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了Swift實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • iOS中Swift指觸即開集成Touch ID指紋識別功能的方法

    iOS中Swift指觸即開集成Touch ID指紋識別功能的方法

    隨著移動支付時代的到來,Touch ID 指紋驗證迅速被支付寶,微信錢包普及,相信各位朋友使用后也大呼方便。下面給大家分享iOS中Swift指觸即開集成Touch ID指紋識別功能的方法,一起看看吧
    2017-03-03
  • Swift?中?Opaque?Types學(xué)習(xí)指南

    Swift?中?Opaque?Types學(xué)習(xí)指南

    這篇文章主要為大家介紹了Swift?中?Opaque?Types學(xué)習(xí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論