加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift中的枚举enum

发布时间:2020-12-14 06:09:58 所属栏目:百科 来源:网络整理
导读:C中的枚举 在C语言中,甚至OC等其他高级语言中,都是把enum枚举的值当作是一个int整数来替代 具体可看我的这篇文章:C语言的枚举与宏定义 Swift中的枚举enum 注:本篇文章学习自泊学(boxueio.com) (PS:Swift更新得真是非常快啊,4个月不到前写的代码,今天


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.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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读