Swift教程之枚举类型详解

2020-01-08 22:45:09丽君

 

这可以被理解为:

“定义一个名为条形码枚举类型,它可以是UPC-A的任一值类型的关联值(Int,Int,Int),或QRCode的一个类型为String的关联值。”

这个定义不提供任何实际的Int或String值,它只是定义了条形码常量和变量当等于Barcode.UPCA或Barcode.QRCode关联值的类型的时候的存储形式。

然后可以使用任何一种类型来创建新的条码:

 

复制代码  
var productBarcode = Barcode.UPCA(8, 85909_51226, 3)

 

此示例创建一个名为productBarcode新的变量,并与相关联的元组值赋给它Barcode.UPCA的值(8,8590951226,3)。提供的“标识符”值都有整数加下划线的文字,85909_51226,使其更易于阅读的条形码。

同一产品可以分配不同类型的条形码:

 

复制代码  
productBarcode = .QRCode("ABCDEFGHIJKLMNOP")

 

在这一点上,原来Barcode.UPCA和其整数值被新的Barcode.QRCode及其字符串值代替。_条形码的常量和变量可以存储任何一个_UPCA或QRCode的(连同其关联值),但它们只能存储其中之一在任何指定时间。

不同的条码类型像以前一样可以使用一个switch语句来检查,但是这一次相关的值可以被提取作为switch语句的一部分。您提取每个相关值作为常数(let前缀)或变量(var前缀)不同的情况下,在switch语句的case代码内使用:

 

复制代码
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).")
}
// prints "QR code with value of ABCDEFGHIJKLMNOP."
如果所有的枚举成员的关联值的提取为常数,或者当所有被提取为变量,为了简洁起见,可以放置一个var,或let标注在成员名称前:

 

 

复制代码
switch productBarcode {