加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift Switch案例“不”

发布时间:2020-12-14 05:44:05 所属栏目:百科 来源:网络整理
导读:我有两个枚举: public enum ServerState { case Connecting case Open case LoggedIn case Closed case Error(NSError)}enum TransportLayerState { case Disconnected(NSError?) case Connecting case Connected} 我需要在它们之间切换,如果ServerState设
我有两个枚举:
public enum ServerState {
  case Connecting
  case Open
  case LoggedIn
  case Closed
  case Error(NSError)
}

enum TransportLayerState {
  case Disconnected(NSError?)
  case Connecting
  case Connected
}

我需要在它们之间切换,如果ServerState设置为基础TL状态不可能的状态,则返回’false’.例如,如果serverState == .Open&&amp ;;它将返回false. 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
}

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

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

由于所有模式都按顺序检查(并且第一次匹配“获胜”),
你可以做以下事情:
switch (serverState,tlState) {

case (.Connecting,.Connecting): return true // Both connecting 
case (.Connecting,_): return false  // First connecting,second something else

case (.Closed,.Disconnected(.None)): return true
case (.Closed,_): return false

// and so on ...

所以一般来说,匹配状态之一不是特定状态的情况可以用两种模式完成:第一种匹配状态,第二个是通配符模式(_),然后匹配所有其他模式案例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读