[英]Switch statement ignores Where clause for multiple cases
請考慮以下情形:
enum XYZ {
case X
case Y
case Z
}
let x = XYZ.X
switch x {
case .X, .Y where false:
println("x or y")
case .Z:
println("z")
default:
println("default")
break
}
即使where
子句為false
,此代碼段也會打印x or y
。
沒有發現任何提及它。 任何人都知道如何重構這個而不重復第一種情況下的代碼?
我現在使用了fallthough
,但where
子句現在重復了
where CONDITION
僅與.Y
綁定的守衛。
case .X where false, .Y where false:
那是因為它符合.X
案例
基本上你的開關是這樣的:
switch x {
case .X:
println("x or y") // This is true, and that's why it prints
case .Y where false:
println("x or y") // This never gets executed
case .Z:
println("z")
default:
println("default")
break
}
要讓它們處於相同的case
,您可能需要執行以下操作:
let x = XYZ.X
var condition = false
if x == .X || x == .Y {
condition = true
}
switch x {
case _ where condition:
println("x or y")
case .Z:
println("z")
default:
println("default")
break
}
case-label →
case
case-item-list:
case-item-list → pattern guard-clause opt | pattern guard-clause opt,
case-item-list
我們必須為每個“模式”編寫“guard-clause”。
如果您願意,您可以:
let condition:Bool = ...
switch x {
case let x where (x == .X || x == .Y) && condition:
// ...
但我認為這不好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.