Swift入门教程系列8-枚举

枚举定义了一组相关的值
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]

这样使用,当然实际过程中这么扩展没什么意义,仅仅做个参考


你可能感兴趣的:(enum,枚举,swift,入门教程)