Enumerations

/*

Enumeration和结构体,类比较类似。

swift中每个枚举值不再像C语言一样,会默认赋值一个整型数据。而是一个叫EnumValue的数值,

xcode中看不出其值时多少,只是每个枚举值不同。


当然可以给枚举指定类型,可以指定为IntString或者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,可见twotwo1并不是一回事。


//可以给每个枚举赋一个原始数值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)")

}


你可能感兴趣的:(Enumerations)