使用 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
或者,您可以使用由 switch
或 if
支持的 guard
语句。但你永远无法摆脱它们!
guard ({
if case .notInUse = foundTransition.validToObject.isInSituation {
return false
}
return true
} ()) else {
fatalError("Transition: The toObject is already in a situation")
}
使用守卫击中格挡。理想情况下想要做一个 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
或者,您可以使用由 switch
或 if
支持的 guard
语句。但你永远无法摆脱它们!
guard ({
if case .notInUse = foundTransition.validToObject.isInSituation {
return false
}
return true
} ()) else {
fatalError("Transition: The toObject is already in a situation")
}