在官方 Swift Programming Language指南中,有关切换案例的说法: “…如果案例包含多个与控制表达式匹配的模式,则这些模式都不能包含常量或变量绑定.” 包含多个模式意味着什么? 这意味
“…如果案例包含多个与控制表达式匹配的模式,则这些模式都不能包含常量或变量绑定.”
包含多个模式意味着什么?
这意味着具有多个模式的案例标签无法声明变量.这是允许的:
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