Swift中的枚举enum

来源:互联网 发布:武汉seo编辑招聘 编辑:程序博客网 时间:2024/05/22 17:44


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. 自动:

如上段代码,当没有手动为后面的THUR、FRI等赋值时,它们将被自动赋值,从上一个值开始递增

3. 访问enum的rawValue:

let week1 = Week.FRI.rawValue
此时为9

4. 用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.GETlet 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)








原创粉丝点击