Swift 如何缩短此开关盒?

Swift 如何缩短此开关盒?,swift,switch-statement,Swift,Switch Statement,我是swift的新手,有人能告诉我是否可以改进这个switch语句吗?还是一种新的方法 switch (a, b) { case (c, bb), (cc, bb), (ccc, bb): // do something like print (1) case (z, bb), (zz, bb), (zzz, bb): // do something like print (2) case (x, bc): // do something

我是swift的新手,有人能告诉我是否可以改进这个switch语句吗?还是一种新的方法

switch (a, b) {
case (c, bb),
     (cc, bb),
     (ccc, bb):
   // do something like print (1)
case (z, bb),
     (zz, bb),
     (zzz, bb):
   // do something like print (2)
case (x, bc):
   // do something like print (3)
}
是否可以执行以下操作?还是类似的

case ((c OR cc OR ccc), bb):
// do something? 
case ((z OR zz OR zzz), bb):
// do something? 

如何缩短此开关箱?

以下是一些选项

如果c、cc、ccc和z、zz、zzz是连续的值范围,则有几种方法可以使用范围运算符:

switch (a, b) {
case (c...ccc, bb):
    print("matched \(a), bb")
case (let x, bb) where z...zzz ~= x:
    print("matched \(x), bb")
}
如果使用范围测试不起作用,一些基本的
,其中的
表达式将起作用,尽管我认为当有两个以上的值需要测试时,这看起来不是很好:

switch (a, b) {
case (let x, bb) where x == c || x == cc || x == ccc:
    print("matched \(x), bb")
case (_, bb) where a == z || a == zz || a == zzz:
    print("matched \(a), bb")
}
switch (a, b) {
case (let x, bb) where [c, cc, ccc].contains(x):
    print("matched \(x), bb")
case (_, bb) where [z, zz, zzz].contains(a):
    print("matched \(a), bb")
}
下面是一个使用数组的示例,
包含
函数,当您有很多值要测试时,它看起来会更好一些:

switch (a, b) {
case (let x, bb) where x == c || x == cc || x == ccc:
    print("matched \(x), bb")
case (_, bb) where a == z || a == zz || a == zzz:
    print("matched \(a), bb")
}
switch (a, b) {
case (let x, bb) where [c, cc, ccc].contains(x):
    print("matched \(x), bb")
case (_, bb) where [z, zz, zzz].contains(a):
    print("matched \(a), bb")
}
我想不出比您的
((c或cc或ccc),bb)
想法更为自然的Swift语法了,它可以以更加简洁的方式测试多个案例

退一步说,在您的特定场景中,将某些逻辑(如c/cc/ccc测试)移动到单独的函数或变量中可能会有价值。例如:

switch (a, b) {
case (_, bb) where a.isOneOfTheCValues:
case (_, bb) where a.isOneOfTheZValues:
case (x, bc):
}

看看
where
-子句:为了得到正确的答案,你需要准确地描述
c
cc
ccc
等是什么,以及它们之间的关系是什么