枚举定义了一组相关的值
C语言中枚举为一组整数
在swift中,不需要给枚举成员提供值,如果提供,这个值可以是一个字符串,一个字符,整数
或者浮点数。
在swift中,枚举类型具有很多class支持的特征,比如计算属性,实例方法,构造函数,也支
持扩展和协议
所以,在swfit中,枚举可以做的事情很多
一、定义枚举
每个枚举定义了一个新的类型,所以开头必须是一个大写字母
注意,在枚举创建的时候并不默认的赋予一个整数,在一行定义多个的成员的时候要用逗号隔开
访问的方式
就是为枚举的每个成员设定一个常量或者变量,在之后访问这个值,不同的成员的相关值类型可
以不同
比如,(12,234)和 工号84366代表的是同一个人
就是在枚举定义的时候给每个成员一个原始值,这个原始值具有相同的类型
如果原始值类型为整形,则当给第一个赋值之后,之后的会自动递增
这里要说明的是,如果原始值对实际的用的过程中来说无意义,就不需要设为原始值。
举个例子:仍然以蓝牙为例,蓝牙状态有三个On,Off,Unsupport,如果你有一个数组分别0对
C语言中枚举为一组整数
在swift中,不需要给枚举成员提供值,如果提供,这个值可以是一个字符串,一个字符,整数
或者浮点数。
在swift中,枚举类型具有很多class支持的特征,比如计算属性,实例方法,构造函数,也支
持扩展和协议
所以,在swfit中,枚举可以做的事情很多
一、定义枚举
每个枚举定义了一个新的类型,所以开头必须是一个大写字母
注意,在枚举创建的时候并不默认的赋予一个整数,在一行定义多个的成员的时候要用逗号隔开
enum BluetoothState{
case ON,OFF,UNSupport
}
enum BluetoothState{
case ON
case OFF
case UNSupport
}
访问的方式
var currentState = BluetoothState.ON
在第一次赋值之后,由于swift具有类型推断,所以第二次的调用可以省略枚举名称currentState = .OFF
二、枚举相关值就是为枚举的每个成员设定一个常量或者变量,在之后访问这个值,不同的成员的相关值类型可
以不同
enum personID{
case NumID(Int,Int)
case StrID(String)
}
定义一个枚举,公司有两种方式区分一个人,分别是(部门编号,成员编号)和工号比如,(12,234)和 工号84366代表的是同一个人
var expPerson = personID.StrID("84366")
switch expPerson {
case .NumID(let first,let second):
println("from string")
case .StrID(let num):
println("from int int")
}
三、原始值就是在枚举定义的时候给每个成员一个原始值,这个原始值具有相同的类型
如果原始值类型为整形,则当给第一个赋值之后,之后的会自动递增
enum Num:Int{
case zero = 0
case one
case two
}
访问原始值let rawData = Num.zero.toRaw()
也可以通过原始值访问枚举let oneNum = Num.fromRaw(2)
四、计算属性方法实例简析这里要说明的是,如果原始值对实际的用的过程中来说无意义,就不需要设为原始值。
举个例子:仍然以蓝牙为例,蓝牙状态有三个On,Off,Unsupport,如果你有一个数组分别0对
应On,1对应Off,2对应Unsupport,那么原始值是有意义的。否则是不需要设原始值的。
为枚举添加方法
eunm HwcNum:Int{
case zero = 0,one,two,three,four,five,six,seven,eight,nine
func descriptionInString()->String{
switch self{
case .zero:
return "zero"
case .one:
return "one"
default:
return "Other"
}
}
}
扩展枚举
extension HwcNum{
subscript (Index:Int) -> String {
get {
switch Index{
case 0:
return "Zero"
case 1:
return "One"
default:
return "Other"
}
}
}
}
这样扩展之后,enum就额外的支持下标访问
这样使用这个枚举
var expNum = HwcNum.zero
var zeroDescription = expNum.descriptionInString()
var indexString = expNum[0]
这样使用,当然实际过程中这么扩展没什么意义,仅仅做个参考