Swift学习笔记(8)—— 枚举

8.枚举

JAVA的枚举语法很简单,用起来也很简单。
Swift的枚举看起来更复杂,当然也更强大一些。


基本语法

与JAVA和C一样,使用enum关键字。
但是不一样的是声明成员的时候还需要case关键字。
每行一个case,N个变量,同一行有多个变量时用逗号,隔开。

enum CC {
    case aa , bb ,cc
}

enum CC2 {
    case aa
    case bb ,cc
}

enum CC3 {
    case aa, bb, cc
}

这三个写法都OK~~

赋值

类型推导在这里依然有用。
并且把变量声明为枚举类型之后,再次赋值时可以省略掉类型名,只用一个点.开始就好。

var cValue : CC = CC.aa
var cValue2 : CC = .aa  // 省略类型名
var cValue3 = CC.aa     // 这里会自动进行类型推导
cValue3 = .bb            // cValue3被推导为CC类型之后,赋值时就可以把CC省略  

实例值(有些翻译为关联值)

可以给枚举的成员设置其他类型的值,设置是每个成员可以有不同类型的的。
——这个就叫做就是实例值。

enum Barcode {//就像这样
    case UPCA(Int, Int, Int)
    case QRCode(String)
}

意思是:

“定义一个名为Barcode的枚举类型,它可以是UPCA的一个实例值(Int,Int,Int),或者QRCode的一个字符串类型(String)实例值。”

然后赋值的时候需要带上实例值了:

var code : Barcode = .UPCA(1,2,3)

用sitch的时候,要使所有的实例值也是完备的。
Also,可以用_匹配任意值。

switch code {
case Barcode.UPCA(_,_,0):
    println("UPCA")
case Barcode.UPCA(_,_,1...5):   
    println("UPCA55")
case Barcode.UPCA(_,_,_):
    println("UPCA2")
case .QRCode:
    print("QRCODE")
}

原始值(Raw Values)

就是默认值咯?不太一样,原始值貌似是不可更改的
声明枚举的时候指定一个类型,然后每个成员都会有这个类型的原始值。

enum Name : String{ //在这里指定原始值的类型
    case A = "Zhang"
    case B  = "Wang"
}
var name = Name.A
println(name.toRaw()) //输出 Zhang

toRaw()/fromRaw(Object raw)

toRaw()获取指定成员的原始值.
fromRaw(Object raw) 获取具有指定原始值的成员:返回一个可选值。

自增

声明为Int的枚举,可以只给第一个成员显式设定原始值,其余的成员原始值会自动递增。



这笔记只是给我自己看的,用以标记一些我觉得需要记的或者有意思的一些知识点,有很多我觉得没必须要赘述的东西就没记,所以是不系统的,只作提示用。
感谢 numbbbbb以及其他贡献者: https://github.com/numbbbbb/the-swift-programming-language-in-chinese
当然,还有英文页: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_70


http://www.barryzhang.com/archives/252

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*