我有这样的代码

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")
}

最佳答案

您可以使用初始的单独模式匹配语句(与独立于case语句的单个switch相比),该语句涵盖任何(有效)数字唯一的操作,并让switch语句后跟处理常见操作的情况。几个数字。这样,您就可以分离出唯一且通用的逻辑操作,其中对于任何与switch实现匹配的模式,通常都将其简单地实现。

例如,以您为例

var myFavoriteNumbers: [Int] = []
var myLeastFavoriteNumbers: [Int] = []
let myNumberDescriptions = ["my number is number 1",
    "this is number 2", "I don't like number 3", "Number Four"]

let myNumber = 1

/* unique action:
    perform a unique action (given a valid number)
    and thereafter proceed to common cases */
if 1...myNumberDescriptions.count ~= myNumber {
    print(myNumberDescriptions[myNumber-1])
}

/* common cases */
switch myNumber {

/* common case: is a favourite number */
case 1...2: myFavoriteNumbers += [myNumber]

/* common case: is a least favourite number */
case 3...4: myLeastFavoriteNumbers += [myNumber]

default:
    print("Default")
}

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

07-28 03:13
查看更多