Swift 如何缩短此开关盒?
我是swift的新手,有人能告诉我是否可以改进这个switch语句吗?还是一种新的方法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
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
等是什么,以及它们之间的关系是什么