在官方的《Swift编程语言指南》中,它有关于开关情况的说法:“ …如果情况包含与控件表达式匹配的多个模式,则这些模式均不能包含常量或变量绑定。”
包含多个模式是什么意思?
这意味着具有多个模式的案例标签无法声明变量。
这是允许的:
let somePoint = (1, 1) switch somePoint { // Case with multiple patterns without binding case (0, _), (_, 0): println("(\(somePoint.0), \(somePoint.1)) is on an axis") default: println("(\(somePoint.0), \(somePoint.1)) is not of an axis") }
这也是允许的:
let somePoint = (1, 1) switch somePoint { // Case with single patterns with binding case (0, let y): println("(0, \(y)) is on an axis") case (let x, 0): println("(\(x), 0) is on an axis") default: println("(\(somePoint.0), \(somePoint.1)) is not of an axis") }
但是,这是禁止的:
let somePoint = (1, 1) switch somePoint { // Case with multiple patterns that have bindings case (0, let y), (let x, 0): println("(\(x), \(y)) is on an axis") default: println("(\(somePoint.0), \(somePoint.1)) is not of an axis") }
上面产生一个错误:
error: 'case' labels with multiple patterns cannot declare variables