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)
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|