在Playground会话期间,我在switch语句中使用Implicitly Unwrapped Optionals时发现奇怪错误。
我已宣布Barcode
枚举:
enum Barcode {
case UPCA(Int, Int, Int)
case QRCode(String)
}
并做了一些尝试......
第一次尝试使用非可选变量定义
var productCode : Barcode
productCode = Barcode.QRCode("ABCDEFGHIJKLMNOP")
// Working
switch productCode {
case .UPCA(let system, let identifier, let check):
println("UPC-A with value of \(system)-\(identifier)-\(check)")
case .QRCode(let code):
println("QRCode with value of \(code)")
}
使用以下控制台输出可以
QRCode,其值为ABCDEFGHIJKLMNOP
第二次尝试使用 Implicitly Unwrapped Optional
var productCode : Barcode!
productCode = Barcode.QRCode("ABCDEFGHIJKLMNOP")
switch productCode {
// Error1
case .UPCA(let system, let identifier, let check):
println("UPC-A with value of \(system)-\(identifier)-\(check)")
// Error2
case .QRCode(let code):
println("QRCode with value of \(code)")
}
和失败并出现以下错误:
Error1: Enum case pattern cannot match values of the non-enum type 'Barcode!' Error2: Enum case pattern cannot match values of the non-enum type 'Barcode!'
要使其工作,我必须打开 productCode
,如下所示
var productCode : Barcode!
productCode = Barcode.QRCode("ABCDEFGHIJKLMNOP")
switch productCode! {
case .UPCA(let system, let identifier, let check):
println("UPC-A with value of \(system)-\(identifier)-\(check)")
case .QRCode(let code):
println("QRCode with value of \(code)")
}
Aren的隐式解包选项应该在没有解包运算符的情况下访问值吗?
为什么第二次尝试失败使用productCode
,一个隐式解包的可选变量,而不打开它?
我错过了一些明显的东西吗?
提前致谢。