gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:01:39 25 4
gpt4 key购买 nike

我有这样的代码

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

最佳答案

您可以使用一个初始的单独模式匹配语句(类似于独立于 switch 语句的单个 case)来涵盖对任何(有效)唯一的操作number,并让 switch 语句跟在 case 后面,这些 case 处理对多个数字通用的操作。通过这种方式,您可以分离独特的和通用的逻辑操作,其中后者作为任何模式匹配 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")
}

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

关于ios - swift switch 语句案例有不同的和共同的事情要做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com