if 情况的补充

complementery of an if case

你会怎么写这个:

if case .SomeEnum(3) = enumType where myInt == 3 {
   //I don't need this case
} else {
   //This is the case I need
}

我知道我可以使用 guard:

guard case .SomeEnum(3) = enumType where myInt == 3 else {
    //This is the case I need
}

但我不认为它是干净的,因为它并不是函数无法完成的真正情况。此外,guard 希望我从函数中 return。

还有其他选择吗?

你不能否定一个模式(据我所知),你的第一个解决方案 使用 if/else 对我来说很好,代码的意图很明显 可见。

switch 语句是替代方案:

switch enumType {
case .SomeEnum(3) where myInt == 3:
    break  // I don't need this case
default:
    // This is the case I need
    // ...
}

关于您的评论

Also, guard expects me to return from the function.

这并不完全正确。您应该离开当前范围。 所以这将按预期编译和工作:

repeat {
    guard case .SomeEnum(3) = enumType where myInt == 3 else {
        // This is the case I need
        // ...
        break
    }
} while false

但我认为这不是更好的解决方案。