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

最新更新