关闭

Swift中的枚举enum

标签: swiftenum
124人阅读 评论(0) 收藏 举报
分类:


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)








0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6451次
    • 积分:444
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:5篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论