久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Swift 3.0 enum 的靈活使用介紹

這篇文章主要介紹了Swift 3.0 enum 的靈活使用介紹,非常具有實用價值,需要的朋友可以參考下

1. 前言

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

2. Objective-C 中的enum


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

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


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

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

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

3. Swift 中的enum

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


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

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


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: "發生了一些不為人知的錯誤", 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對網絡請求結果等做簡單的package操作


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

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


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

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

舉個負面例子:


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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持html5模板網。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要給大家介紹了關于RxSwift學習教程之類型對象Subject的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于RxSwift學習教程之Observable的相關資料,文中詳細的給大家介紹了關于新建Observable、訂閱Observable和取消訂閱并消除內存泄漏等相關的內容,需要的朋友可以
RxSwift是Swift函數響應式編程的一個開源庫,由Github的ReactiveX組織開發,維護。下面這篇文章主要給大家介紹了關于RxSwift學習之基礎篇的相關資料,文中通過示例代碼介紹的非常詳細,需
這篇文章主要為大家詳細介紹了Swift4.0 Array數組的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
CATransition動畫主要在過渡時使用,比如兩個頁面層級改變的時候添加一個轉場效果。CATransition分為兩類,一類是公開的動畫效果,一類是非公開的動畫效果。這篇文章主要給大家介紹了
近日,iPhone X的發布在人們群眾引起了很大的轟動,下面這篇文章主要給大家介紹了關于利用Swift如何判斷iPhone X機型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
主站蜘蛛池模板: 色本道 | 日本精品一区二区三区在线观看视频 | 日韩欧美国产一区二区 | 日本亚洲一区 | 最新日韩在线视频 | 欧美日韩一区二区三区四区五区 | 亚洲乱码国产乱码精品精98午夜 | 99久久精品国产一区二区三区 | av手机免费在线观看 | 国产91久久久久久 | 亚洲精品国产电影 | 99久久免费精品国产男女高不卡 | 国产成人久久av免费高清密臂 | 色婷婷综合久久久中字幕精品久久 | 久久久国产精品一区 | 成人免费视频网站在线观看 | 中文二区| 一区二区三区四区在线视频 | 亚洲香蕉 | av激情在线 | 蜜桃黄网| 中文字幕精品一区久久久久 | 色婷婷综合久久久久中文一区二区 | 亚洲高清电影 | 日韩欧美在线播放 | 久久综合狠狠综合久久综合88 | 成人av免费网站 | 免费黄色的网站 | 91麻豆精品国产91久久久更新资源速度超快 | 天天综合网天天综合色 | 成人片免费看 | 成人精品区 | 欧美精品一二三 | 天天操天天射天天 | 日本不卡一区二区三区在线观看 | 日韩久久久久久 | 国产亚洲精品久久久久动 | 人人射人人插 | 奇米久久 | 在线观看亚洲精品 | 91精品国产综合久久久久 |