pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Swift 3.0 enum 的靈活使用介紹

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

1. 前言

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

2. Objective-C 中的enum


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

這是一段標(biāo)準(zhǔn)的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í)有所幫助,也希望大家多多支持html5模板網(wǎng)。

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

相關(guān)文檔推薦

這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)教程之類型對象Subject的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)教程之Observable的相關(guān)資料,文中詳細的給大家介紹了關(guān)于新建Observable、訂閱Observable和取消訂閱并消除內(nèi)存泄漏等相關(guān)的內(nèi)容,需要的朋友可以
RxSwift是Swift函數(shù)響應(yīng)式編程的一個開源庫,由Github的ReactiveX組織開發(fā),維護。下面這篇文章主要給大家介紹了關(guān)于RxSwift學(xué)習(xí)之基礎(chǔ)篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需
這篇文章主要為大家詳細介紹了Swift4.0 Array數(shù)組的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
CATransition動畫主要在過渡時使用,比如兩個頁面層級改變的時候添加一個轉(zhuǎn)場效果。CATransition分為兩類,一類是公開的動畫效果,一類是非公開的動畫效果。這篇文章主要給大家介紹了
近日,iPhone X的發(fā)布在人們?nèi)罕娨鹆撕艽蟮霓Z動,下面這篇文章主要給大家介紹了關(guān)于利用Swift如何判斷iPhone X機型的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
主站蜘蛛池模板: 爆炸冲击传感器-无线遥测传感器-航天星百科 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 船用锚链|专业锚链生产厂家|安徽亚太锚链制造有限公司 | ptc_浴霸_大巴_干衣机_呼吸机_毛巾架_电动车加热器-上海帕克 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 作文导航网_作文之家_满分作文_优秀作文_作文大全_作文素材_最新作文分享发布平台 | 北京公积金代办/租房发票/租房备案-北京金鼎源公积金提取服务中心 | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 协议书_协议合同格式模板范本大全| 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 广东成考网-广东成人高考网 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 泰安办公家具-泰安派格办公用品有限公司 | 碎石机设备-欧版反击破-欧版颚式破碎机(站)厂家_山东奥凯诺机械 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 振动传感器,检波器-威海广达勘探仪器有限公司 | 北京包装设计_标志设计公司_包装设计公司-北京思逸品牌设计 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 深圳法律咨询【24小时在线】深圳律师咨询免费 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 |