相关疑难解决方法(0)

Swift Switch案例"不"

我有两个枚举:

public enum ServerState {
  case Connecting
  case Open
  case LoggedIn
  case Closed
  case Error(NSError)
}

enum TransportLayerState {
  case Disconnected(NSError?)
  case Connecting
  case Connected
}
Run Code Online (Sandbox Code Playgroud)

我需要在它们之间切换,如果ServerState设置为基础TL状态不可能的状态,则返回'false'.例如,如果是,它将返回false serverState == .Open && tlState == .Disconnected.我正在尝试使用switch语句执行此操作,但我发现我真正想要的是匹配其中一个状态不是特定状态的情况.例如:

switch (serverState, tlState) {
case (.Connecting, !.Connecting): return false
case (.Closed, !.Disconnected(.None)): return false
case (.Error(_), !.Disconnected(.Some(_)): return false
case (.Open, !.Connected), (.LoggedIn, !.Connected): return false
default: return true
}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,因为你不能放在!案例陈述之前.我唯一的另一种选择是指定所有允许的案例,这些案例要多得多.指定限制并允许所有其他状态组合更有意义,但我不知道如何执行此操作.有任何想法吗?我也试图避免嵌套的switch语句.

注意:我知道我可以使用Swift 2进行此操作if case,但我现在不能使用Swift 2,因为这是生产代码.所以请回答Swift 1.2中的解决方案.

switch-statement swift

3
推荐指数
1
解决办法
1119
查看次数

标签 统计

swift ×1

switch-statement ×1