Swift: 具有多个模式的 Switch case 无法绑定到变量
Swift: Switch case with multiple patterns cannot bind to variable
在官方 Swift Programming Language 指南中,关于 switch case 是这样说的:
“...如果案例包含与控制表达式匹配的多个模式,这些模式中的 none 可以包含常量或变量绑定。”
包含多个模式是什么意思?
意思是多模式的case标签不能声明变量。
这是允许的:
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
在官方 Swift Programming Language 指南中,关于 switch case 是这样说的: “...如果案例包含与控制表达式匹配的多个模式,这些模式中的 none 可以包含常量或变量绑定。”
包含多个模式是什么意思?
意思是多模式的case标签不能声明变量。
这是允许的:
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