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

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

最佳答案

您可以使用一个初始的单独模式匹配语句(类似于独立于 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/

相关文章:

ios - 以编程方式旋转 UIScrollView 内容

ios - UIView 弹跳?

ios - 以编程方式将键盘从大写切换为小写

ios - 如果 iOS 7,请使用 MPMoviePlayerController

java - 奇怪的错误 - 从菜单中断后不执行任何操作

java - 如何在 switch case 语句中匹配多个输入值?

ios - 为 UIControlStateHighlighted 自定义 UISearchBarIconClear 不起作用

iphone - 使用未解析的标识符 'Singleton' Swift 3

swift - 添加框架后未在应用程序上加载库

javascript - 使用 if 语句实现相同功能的多个按钮