例如最盅,假設(shè)一個庫存跟蹤系統(tǒng)需要利用兩種不同類型的條形碼來跟蹤商品葵蒂。有些商品上標有 UPC-A 格式的一維碼担敌,它使用數(shù)字 0 到 9。每一個條形碼都有一個代表“數(shù)字系統(tǒng)”的數(shù)字辞槐,該數(shù)字后接 10 個代表“標識符”的數(shù)字掷漱。最后一個數(shù)字是“檢查”位,用來驗證代碼是否被正確掃描:
其他商品上標有 QR 碼格式的二維碼榄檬,它可以使用任何 ISO8859-1 字符卜范,并且可以編碼一個最多擁有 2,953 字符的字符串:
對于庫存跟蹤系統(tǒng)來說,能夠把 UPC-A 碼作為三個整型值的元組鹿榜,和把 QR 碼作為一個任何長度的字符串存儲起來是方便的海雪。
在 Swift 中锦爵,用來定義兩種商品條碼的枚舉是這樣子的:
enumBarcode{caseUPCA(Int,Int,Int)caseQRCode(String)}
Swift
以上代碼可以這么理解:
“定義一個名為Barcode的枚舉類型,它可以是UPCA的一個相關(guān)值(Int喳魏,Int,Int)怀薛,或者QRCode的一個字符串類型(String)相關(guān)值刺彩。”
這個定義不提供任何Int或String的實際值枝恋,它只是定義了创倔,當(dāng)Barcode常量和變量等于Barcode.UPCA或Barcode.QRCode時,相關(guān)值的類型焚碌。
然后可以使用任何一種條碼類型創(chuàng)建新的條碼畦攘,如:
varproductBarcode=Barcode.UPCA(8,85909_51226,3)
Swift
以上例子創(chuàng)建了一個名為productBarcode的新變量,并且賦給它一個Barcode.UPCA的相關(guān)元組值(8, 8590951226, 3)十电。提供的“標識符”值在整數(shù)字中有一個下劃線知押,使其便于閱讀條形碼。
同一個商品可以被分配給一個不同類型的條形碼鹃骂,如:
productBarcode=.QRCode("ABCDEFGHIJKLMNOP")
Swift
這時台盯,原始的Barcode.UPCA和其整數(shù)值被新的Barcode.QRCode和其字符串值所替代。條形碼的常量和變量可以存儲一個.UPCA或者一個.QRCode(連同它的相關(guān)值)畏线,但是在任何指定時間只能存儲其中之一静盅。
像以前那樣,不同的條形碼類型可以使用一個 switch 語句來檢查寝殴,然而這次相關(guān)值可以被提取作為 switch 語句的一部分蒿叠。你可以在switch的 case 分支代碼中提取每個相關(guān)值作為一個常量(用let前綴)或者作為一個變量(用var前綴)來使用:
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
如果一個枚舉成員的所有相關(guān)值被提取為常量,或者它們?nèi)勘惶崛樽兞框汲#瑸榱撕啙嵤醒剩憧梢灾环胖靡粋€var或者let標注在成員名稱前:
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."