使用 Guard 捕获除一个之外的所有枚举状态

发布于 2025-01-10 16:02:46 字数 466 浏览 1 评论 0原文

使用后卫击中障碍物。理想情况下,想要执行一个保护语句来捕获除一个之外的所有枚举状态,因此会类似于:

guard case .notInUse != foundTransition.validToObject.isInSituation else { 
   fatalError("Transition: The toObject is already in a situation")
}

但似乎不允许这种不匹配的测试。因此,请使用下面的 if 语句:

if case .notInUse = foundTransition.validToObject.isInSituation {} else {
   fatalError("Transition: The toObject is already in a situation")
}

它可以工作,但感觉守卫会更整洁。有什么想法吗?

Hitting a block on using a guard. Ideally want to do a guard statement that traps all enum states other than one, so would be something like:

guard case .notInUse != foundTransition.validToObject.isInSituation else { 
   fatalError("Transition: The toObject is already in a situation")
}

But this non matching test does not seem to be allowed. So instead using the below if statement:

if case .notInUse = foundTransition.validToObject.isInSituation {} else {
   fatalError("Transition: The toObject is already in a situation")
}

It works but feels a guard would be neater. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小瓶盖 2025-01-17 16:02:46

不可能否定 case 语句。

您要么需要使用 if 语句,要么进行枚举 Equatable,在这种情况下,您只需删除 case 关键字即可。

guard foundTransition.validToObject.isInSituation != .notInUse

或者,您可以使用由 switchif 支持的 guard 语句。但你永远摆脱不了它们!

It is impossible to negate a case statement.

You either need to use your if statement, or make the enumeration Equatable, in which case you would just drop the case keyword.

guard foundTransition.validToObject.isInSituation != .notInUse

Alternatively, you can use a guard statement that is backed by a switch or if. But you'll never get rid of them! ????

guard ({
  if case .notInUse = foundTransition.validToObject.isInSituation {
    return false
  }
  return true
} ()) else {
  fatalError("Transition: The toObject is already in a situation")
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文