亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

Swift 3.0 enum 的靈活使用介紹

2020-03-09 17:45:19
字體:
來源:轉載
供稿:網友

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承擔的更多的還是解釋的作用

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产中文字幕| 欧美性猛交xxxx乱大交3| 亚洲视频在线播放| 1769国内精品视频在线播放| 日韩精品视频观看| 国产91色在线| 久久久久久久91| 91麻豆国产语对白在线观看| 亚洲欧美日韩视频一区| 日韩精品久久久久久福利| 欧美日韩性视频在线| 国产一区二区色| 欧美人与性动交a欧美精品| 久久精品一偷一偷国产| 国产美女精品免费电影| 久久精品久久精品亚洲人| 久久久91精品国产一区不卡| 2018国产精品视频| 亚洲www永久成人夜色| 久久久久久综合网天天| 国产精品久久久久久久久免费看| 久久久久这里只有精品| 91精品久久久久久久久久另类| 欧美孕妇与黑人孕交| 国产日韩欧美在线观看| 国产精品一香蕉国产线看观看| 亚洲综合在线播放| 国产99视频在线观看| 欧美午夜影院在线视频| 中文字幕日韩欧美精品在线观看| 国产精品欧美在线| 国产美女久久久| 国产精品爽爽ⅴa在线观看| 欧美激情a在线| 狠狠色噜噜狠狠狠狠97| 2019精品视频| 亚洲丁香婷深爱综合| 国产一区二区三区网站| 亚洲第一精品夜夜躁人人爽| 欧美成人激情图片网| 国产亚洲精品va在线观看| 久久精品国产v日韩v亚洲| 久久精品视频在线观看| 亚洲男人7777| 一区二区三区国产在线观看| 亚洲一区二区三区xxx视频| 国产中文字幕亚洲| 久久久久久久久久久91| 久久久久久这里只有精品| 亚洲精品98久久久久久中文字幕| 欧日韩不卡在线视频| 北条麻妃一区二区三区中文字幕| 日韩精品视频免费专区在线播放| 亚洲国产欧美日韩精品| 久久视频免费观看| 亚洲第一区在线| 日韩免费观看av| 韩国欧美亚洲国产| 日韩激情av在线播放| 精品国产视频在线| 欧美日韩在线观看视频| 久久久之久亚州精品露出| 亚洲激情第一页| 2018日韩中文字幕| 欧美日韩另类在线| 日韩av成人在线| 欧美丰满老妇厨房牲生活| 亚洲欧洲一区二区三区在线观看| 久久久999国产| 国产亚洲在线播放| 欧美日韩第一视频| 亚洲人高潮女人毛茸茸| 日韩av在线天堂网| www.日韩欧美| 亚洲图片在线综合| 亚洲美女动态图120秒| 最近中文字幕mv在线一区二区三区四区| 欧美激情一区二区三区在线视频观看| 亚洲精品小视频| 亚洲午夜av电影| 亚洲午夜激情免费视频| 91精品在线影院| 91精品国产综合久久香蕉最新版| 久久久国产精彩视频美女艺术照福利| yw.139尤物在线精品视频| 中文字幕国产亚洲2019| 91在线观看免费网站| 国产精品第一视频| 国产欧美日韩免费看aⅴ视频| 2019中文字幕在线| 爱福利视频一区| 精品自在线视频| 亚洲人成亚洲人成在线观看| 欧美日本在线视频中文字字幕| 国产精品美女在线观看| 亚洲人午夜精品免费| 日韩视频在线免费观看| 欧美日韩国产中字| 亚洲人成绝费网站色www| 色多多国产成人永久免费网站| 国产精品亚洲аv天堂网| 亚洲第一精品电影| 91日本在线视频| 亚洲一级免费视频| 欧美成人三级视频网站| 久久久亚洲天堂| 久久久免费av| 日韩av片免费在线观看| 91在线高清免费观看| 久久精品国产免费观看| 欧美激情a∨在线视频播放| 欧美性xxxx极品hd欧美风情| 亚洲色在线视频| 日韩不卡中文字幕| 55夜色66夜色国产精品视频| 日韩在线观看免费全集电视剧网站| 亚洲欧美日韩精品久久亚洲区| 久久久久北条麻妃免费看| 国内精品国产三级国产在线专| 中文字幕精品久久| 深夜精品寂寞黄网站在线观看| 麻豆国产va免费精品高清在线| 欧美在线免费观看| 欧美激情视频在线观看| 国产精品影院在线观看| 久久视频在线看| 精品久久久中文| 亚洲欧美制服另类日韩| 久久视频免费在线播放| 精品一区二区三区电影| 午夜精品视频网站| 亚洲精品国产电影| 亚洲欧美日韩中文在线制服| 欧美日韩在线观看视频| 亚洲人成网在线播放| 色琪琪综合男人的天堂aⅴ视频| 亚洲精品电影在线观看| 亚洲激情视频网| 国产精品aaa| 国产一区二区成人| 日韩av在线资源| 亚洲天堂第二页| 欧美成人亚洲成人日韩成人| 欧美亚洲在线观看| 欧美精品在线第一页| 久久久精品亚洲| 国产精品美腿一区在线看| 国产欧美日韩专区发布| 国产精品高精视频免费| www.亚洲免费视频| 亚洲女人天堂av| 92看片淫黄大片看国产片| 亚洲欧美日韩在线一区| 国产视频精品一区二区三区| 日韩中文理论片| 亚洲片在线资源| 欧美在线免费观看| 国产在线高清精品| 国产福利精品av综合导导航| 欧美理论电影在线播放| 亚洲精品福利免费在线观看| 一区二区国产精品视频| 色偷偷av一区二区三区| 九九久久国产精品|