我有这样的代码
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”使用更高级的逻辑(例如事件处理程序)。