Swift语言中,具有类特征的类型包括三种,即枚举类型、结构类型(包括基本类型,基本类型实际都是结构类型的特例)、类。其中枚举类型、结构类型是属于值类型,类属于引用类型。三种类型都可以添加属性、方法、下标方法,能够使用扩展进行功能扩展,使用协议等。
一、 枚举
枚举定义了一种包含一组相关值的公共类型。枚举是Swift中的一种与类类似的类型,具有许多传统类才有的特征,例如计算属性、实例方法,能够通过扩展或协议增强功能等。
1.1 枚举定义
Swift 语言的枚举类型的定义语法如下:
enum CompassPoint {
case North
case South
case East
case West
}
枚举语法以一个关键字enum来标识,enum后面包含一个枚举类型名字,枚举定义全部放到一对大括号中。
在枚举中定义的值称为枚举成员值,用case关键字来指示一个新的枚举成员值。
与C和Objective-C语言的枚举类型不同的是:在Swift中不需要为枚举成员分配一个默认的整数值。
如果为枚举成员提供值,该值可以是一个字符串、一个字符或者是一个任意整数或浮点数。
枚举成员值可以定义到一行中,并用逗号分割。
enum Planet {
case Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune
}
每个新定义的枚举都属于一种新的独立的类型。
1.2 枚举的使用
可以为一个常量或变量分配一种枚举类型的值,如:
var directionToHead =CompassPoint.West
以上定义的变量directionToHead可以推断为是一种CompassPoint类型的枚举变量,因此你可以设置该变量为CompassPoint类型的其它值,如:
directionToHead = .East //枚举类型被省略
枚举也能够在switch语句中使用,用来匹配独立的枚举值:
directionToHead = .South
switch directionToHead {
case .North:
println("Lots of planets have a north")
case .South:
println("Watch out for penguins")
case .East:
println("Where the sun rises")
case .West:
println("Where the skies are blue")
}
1.3 为枚举成员分配相关值
Swift中能够为每一个枚举成员规定一个任意类型的相关值,并且为每个枚举成员规定的相关值的类型可以不同。
enum Barcode {
case UPCA(Int,Int,Int)
case QRCode(String)
}
该例子定义了一个类型为Barcode的枚举类型,并定义了两个枚举值UPCA 和QRCode,并可以为枚举值UPCA分配一个多元组类型的相关值,为QRCode分配一个字符串类型的相关值,该例子没有为枚举值本身指定任何类型的值。
可以使用以上定义的枚举为一个常量或变量赋值,如:
var productBarcode =Barcode.UPCA(8,85909_51226,3)
该例子为变量 productBarcode分配了一个Barcode.UPCA枚举值,为其分配的相关的多元组类型的值为(8,3)。
然后该变量productBarcode可以设置为带字符串类型相关值的另外的一个枚举值:
productBarcode = .QRCode(“ABCDEFGHIJKLMNOP”)
还可以在switch语句中使用该枚举,并通过绑定常量或变量的方式引出其带有的相关类型的值:
switch productBarcode {
case .UPCA(let numberSystem,let identifier,let check):
println("UPC-A with value of\(numberSystem),\(identifier),\(check).")
case .QRCode(let productCode):
println("QR code with value of\(productCode).")
}
如果枚举成员的所有的相关值都作为常量被引出,或者所有的相关值都作为变量形式被引出,以上语法还可以简写为如下形式:
switch productBarcode {
case let .UPCA(numberSystem,identifier,check):
println("UPC-A with value of\(numberSystem),\(check).")
case let .QRCode(productCode):
println("QR code with value of\(productCode).")
}
1.4 为枚举分配原始值
除了为枚举成员分配相关的值外,还能为每个枚举成员预分配一个同类型的原始值。这与C 语言为枚举成员分配一个整数值类似,但Swift定义的原始值的类型可以是字符串、字符、或任意的整数或浮点数类型等,如:
enum ASCIIControlCharacter:Character {
case Tab ="\t"
case LineFeed ="\n"
case CarriageReturn ="\r"
}
原文链接:/swift/326957.html