C中的枚举
在C语言中,甚至OC等其他高级语言中,都是把enum枚举的值当作是一个int整数来替代
具体可看我的这篇文章:C语言的枚举与宏定义
Swift中的枚举enum
注:本篇文章学习自泊学(boxueio.com)
(PS:Swift更新得真是非常快啊,4个月不到前写的代码,今天打开就提醒有语法要修正…)
1. what:
在Swift中,enum看起来是这样的:
enum Week{ case MON case TUES case WED case THUR case FRI case SAT case SUN } let week1 = Week.MON或:
enum Subject{ case Chinese,English,Chemistry,History } let mySubject = Subject.Chinese
无论哪种方式,可以在playground看到,当在使用Week.MON时,就已经在访问一个enum的值了,它的case就是它的值本身,无需刻意地定义一个值来代表它。
2. why:
使用enum比使用字符串或数字有很多好处:
1 避免输入错误
2 使用enum类型是安全的,如当使用Week或Subject时,不会发生类型正确,值却没有意义的情况
3. how:
1)enum与switch
如果enum的类型可被推导出,则可在读取值的时候,省掉它类型的名字:
func week(today: Week) { switch today{ // 因为today可以通过类型推导推出它的类型是Week,所以不用today.MON,而是直接写.MON case .MON,.TUES,.WED: return case .THUR,.FRI,.SAT,.SUN: return } }
对于一个enum的switch来说,它的所有的case就是它全部的情况,所以最后不用再写default
2)enum值的表达方式1:raw value原始数值
1. 手动为enum指定值
enum Week:Int{ case MON = 2 case TUES = 4 case WED = 7 case THUR case FRIFRI case SAT case SUN }2. 自动:
3. 访问enum的rawValue:
let week1 = Week.FRI.rawValue此时为94.用rawValue来访问一个enum的值
let week2 = Week(rawValue: 7)此时enum值为WED
3)enum值的表达方式2: associated value结合值
1. 给每一个case绑定不同类型的值
enum HTTPAction{ case GET // 不关联任何值 case POST(String)// 关联一个字符串 case PUT(Int,String)// 关联一个tuple } let get = HTTPAction.GET let post = HTTPAction.POST("hello") let put = HTTPAction.PUT(1,"world")
2. 通过switch访问enum的结合值associated value
func actionDesc(action: HTTPAction) { switch action { case .GET: print("get") case let .POST(msg):// let msg = action print("post: \(msg)") case .PUT(let num,let name): print("put: \(num): \(name)") } } actionDesc(action: get) actionDesc(action: post) actionDesc(action: put)