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

Use Guard to trap all enum states other than one

使用守卫击中格挡。理想情况下想要做一个 guard 语句来捕获除一个之外的所有枚举状态,所以会是这样的:

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

它有效,但感觉守卫会更整洁。有什么想法吗?

无法否定 case 语句。

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

guard foundTransition.validToObject.isInSituation != .notInUse

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

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