swift switch语句案例有不同和共享的事情要做

时间:2016-08-03 19:06:22

标签: ios swift switch-statement control-flow

我有这样的代码

switch thing {
  case thisThing:
     do thing #1
     do thing #2
  case thatThing:
     do thing #2
     do thing #3
  case anotherThing:
     do thing #4
  default:
     default
}

因此,每种情况都只有它的作用。有些案例也与一个或多个其他案件做同样的事情。

如果我不想要任何重复代码,有没有办法实现这一目标?

或者,有没有一种更有效的方法可以在没有switch语句的情况下这样做?我的意思是,我可以,例如,我可以使用if语句,但是像switch语句一样,我无法想到一种方法来实现我想要的而不使用重复代码。

此外,这个例子可能比上面的

更清楚
myFavoriteNumbers = []
myLeastFavoriteNumbers = []

switch myNumber {
case 1:
  print("my number is number 1") // do this only for case 1
  myFavoriteNumbers += [1] // do this for case 1 and case 2
case 2:
  print("this is number 2") // do this only for case 2
  myFavoriteNumbers += [2] // do this for case 1 and case 2
case 3:
  print("I don't like number 3") // do this only for case 3
  myLeastFavoriteNumbers += [3] // do this for case 3 and case 4
case 4:
  print("Number Four") // do this only for case 4
  myLeastFavoriteNumbers += [4] // do this for case 3 and case 4
default:
  print("Default")
}

3 个答案:

答案 0 :(得分:4)

您可以使用初始单独的模式匹配语句(与独立于flex-basis: content语句的单个case相比),该语句涵盖对任何(有效)数字唯一的操作,并让{ {1}}语句跟随处理多个数字常见操作的情况。通过这种方式,您可以分离唯一和通用的逻辑操作,后者只是作为匹配switch实现的任何模式的通常情况实现。

例如,您的例子

switch

如果对任何数字唯一的操作更复杂,请使用与上面相同的方法,但对于唯一操作“case”使用更高级的逻辑(例如,事件处理程序)。

答案 1 :(得分:1)

您可以嵌套切换相同值的switch语句,如下所示:

upperLimit

不是您所见过的最优雅的代码,但它可以实现您想要实现的目标而不会重复。

答案 2 :(得分:1)

作为一个明显的解决方案,脑海中浮现在脑海中,但正如有人在这里已经说它不会以一种有用的方式发挥作用。

我没有任何银弹,但我想我会这样做:

创建一个仅包含单独逻辑的switch语句

创建第二个switch语句,它结合了通用逻辑

switch thing {
case thisThing:
   do thing #1
case thatThing:
   do thing #4
case anotherThing:
   do thing #5
default: ()
}

switch thing {
case thisThing, thatThing:
   do thing #2
default: ()
}

当你的逻辑不依赖于函数调用的顺序时它会起作用(它不应该,如果它不是,它可能是改进你的代码设计的标志)。对我来说它看起来很干净,但它仍然不理想..