/*
Enumeration和结构体,类比较类似。
在swift中每个枚举值不再像C语言一样,会默认赋值一个整型数据。而是一个叫EnumValue的数值,
在xcode中看不出其值时多少,只是每个枚举值不同。
当然可以给枚举指定类型,可以指定为Int,String或者Float,其中如果指定为Int后,每个
枚举如果不给赋值,则会有一个默认的rawdata,第一个为0,后面递增。如果指定Int以外的类型,
则每个枚举必须给指定rawdata
enum TestEnumeration:Int{
case one
case two,three=5,four //one=1,two=2,three=5,four=6
}
println(TestEnumeration.two2.toRaw())
可以定义初始化函数,可以定义函数对其进行扩展,可以遵循protocols提供功能。
*/
//定义语法,case 用来表示新的一行数据,当然你可以只用一个case,每个数据用逗号隔开。
//不像C语言,swift不会给每个成员赋值默认的整数
enum TestEnumeration{
case ONE
case TWO,THREE
}
println(TestEnumeration.TWO)//Enum value
var e = TestEnumeration.ONE
//在变量e已经被推导出是TestEnumeration的枚类型的举值之后,下次赋值可以这样写:
e = .THREE
/*����在switch一个枚举时,如果没有case所有的情况,则编译不过。
这一点大大降低了bug的发生,当然如果你比较自信不会漏掉,也可以使用default */
switch e{
case .ONE:
println("one")
case .TWO:
println("two")
default:
println("other")
}
//结果输出other,可见two和two1并不是一回事。
//可以给每个枚举赋一个原始数值Raw value(必须各不相同),但是必须要给枚举类型一个数据类型
//如果类型不是Int,则必须给每个枚举赋值(raw data),如果是Int默认从0开始递增
enum RawDataEnum:Int {
case ONE
case TWO
}
println("Raw data type Enumeration\(RawDataEnum.ONE.toRaw())")
//关联数值 Associated values
//下面的关联型枚举模拟要求陌生人说明身份的两种情况,
//一种是报上你的姓名,一种是报上你的编号,其实跟官网上的例子一样,一种是二维码,一种条形码
//��������这里通过switch的这种binding value的特性来进行出来感觉真是太巧妙啦。
enum AssociatedEnum
{
case myenum(Int)
case myname(String)
}
var v = AssociatedEnum.myenum(3)
switch v
{
case .myenum:
println(".myenum") //.myenum
case .myname:
println(".myname")
}
//第二个版本
switch v
{
case .myenum(var number):
println(".myenum \(number)") //.myenum 3
case .myname(var name):
println(".myname \(name)")
}