Swift枚举相关值

Swift枚举相关值

例如,假设一个库存跟踪系统需要利用两种不同类型的条形码来跟踪商品。有些商品上标有 UPC-A 格式的一维码,它使用数字 0 到 9。每一个条形码都有一个代表“数字系统”的数字,该数字后接 10 个代表“标识符”的数字。最后一个数字是“检查”位,用来验证代码是否被正确扫描:

其他商品上标有 QR 码格式的二维码,它可以使用任何 ISO8859-1 字符,并且可以编码一个最多拥有 2,953 字符的字符串:

对于库存跟踪系统来说,能够把 UPC-A 码作为三个整型值的元组,和把 QR 码作为一个任何长度的字符串存储起来是方便的。

在 Swift 中,用来定义两种商品条码的枚举是这样子的:

1
enum Barcode{caseUPCA(Int,Int,Int)caseQRCode(String)}

Swift

以上代码可以这么理解:

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

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

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

1
var productBarcode = Barcode.UPCA(8,85909_51226,3)

Swift

以上例子创建了一个名为productBarcode的新变量,并且赋给它一个Barcode.UPCA的相关元组值(8, 8590951226, 3)。提供的“标识符”值在整数字中有一个下划线,使其便于阅读条形码。

同一个商品可以被分配给一个不同类型的条形码,如:

1
productBarcode = .QRCode("ABCDEFGHIJKLMNOP")

Swift

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

像以前那样,不同的条形码类型可以使用一个 switch 语句来检查,然而这次相关值可以被提取作为 switch 语句的一部分。你可以在switch的 case 分支代码中提取每个相关值作为一个常量(用let前缀)或者作为一个变量(用var前缀)来使用:

1
2
3
4
5
6
7
8
9
10
11
12
switch productBarcode{
case.UPCA(let numberSystem,let identifier,let check):
print("UPC-A with value of\(numberSystem),\(identifier),\(check).")
case.QRCode(let productCode):
println("QR code with value of\(productCode).")
}
// 输出 "QR code with value of ABCDEFGHIJKLMNOP.”

Swift

如果一个枚举成员的所有相关值被提取为常量,或者它们全部被提取为变量,为了简洁,你可以只放置一个var或者let标注在成员名称前:

1
2
3
4
5
6
7
8
9
10
11
12
switch productBarcode{
case let .UPCA(numberSystem,identifier,check):
print("UPC-A with value of\(numberSystem),\(identifier),\(check).")
case let .QRCode(productCode):
print("QR code with value of\(productCode).")
}
// 输出 "QR code with value of ABCDEFGHIJKLMNOP."
------本文结束😘感谢阅读------