当前位置: 首页 > 面试题库 >

Swift Switch保护壳“不”

贺经纶
2023-03-14
问题内容

我有两个枚举:

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 State无法实现的状态,则需要在它们之间进行切换,并返回’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
}

显然,这是行不通的,因为您不能放在!case语句之前。我唯一的其他选择是指定所有 允许的
情况,而这种情况要多得多。指定限制并允许所有其他状态组合更有意义,但是我不确定如何执行此操作。有任何想法吗?我还试图避免嵌套的switch语句。

注意:我知道我可以使用Swift 2来做到这一点if case,但是由于这是生产代码,所以我现在不能使用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 ...

因此,通常,可以使用两种模式来匹配其中一个状态 不是 特定状态的情况:第一个 匹配 状态,第二个是通配符模式(_),然后匹配所有其他情况。



 类似资料:
  • 本文向大家介绍易语言保护壳的sdk代码,包括了易语言保护壳的sdk代码的使用技巧和注意事项,需要的朋友参考一下 ZProtect //Code_Confusion 是代码乱序加密标记,允许您选择一部分被乱序的代码 置入代码 ({ 235, 8, 83, 84, 95, 83, 84, 65, 82, 84 }) ' Code_Confusion标记开始 置入代码 ({ 235, 8, 83, 84

  • 问题内容: 我正在使用基于Node.js的https服务器,该服务器使用HTTP Basic进行身份验证(这很好,因为数据是通过SSL加密连接发送的)。 现在我想提供一个Socket.io连接 加密和 仅适用于经过身份验证的用户。 问题是如何做到这一点。我已经发现在连接到套接字时需要在客户端JavaScript代码中指定,但是如何在服务器端强制套接字连接只能在SSL上运行,并且仅适用于经过身份验证

  • 问题内容: JKS(Java密钥存储)文件是否已加密?它们是否为加密密钥提供全面保护,还是我仅需要依赖访问控制? 有没有办法确保密钥受到保护? 我对详细的细节感兴趣,包括算法,密钥管理等。这些可配置的任何一个吗? 问题答案: 它们已加密。 该算法取决于提供者。提供者将根据密码返回密钥/证书。如果需要强安全性,请找到使用强加密的密钥库提供程序。

  • 简介 Laravel 可以轻松地保护应用程序免受 跨站点请求伪造 (CSRF) 攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。 Laravel 会自动为每个活跃用户的会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。 无论何时,当您在应用程序中定义HTML表单时,都应该在表单中包含一个隐藏的CSRF标记字段,

  • 启用触摸保护 把 Yubikey-manager 安装在一个绝对路径:【译者注:homebrew 是 macOS 平台的包管理软件】 ❯ brew install libu2f-host libusb swig ykpers ❯ git clone git@github.com:Yubico/Yubikey-manager.git ❯ git submodule update --init --r

  • 6xx受保护 600 Series,Repliesregardingconfidentialityandintegrity 631 Integrityprotectedreply. 632 Confidentialityandintegrityprotectedreply. 633 Confidentialityprotectedreply.