是否可以在Swift中缩写此条件?

是否可以在Swift中缩写此条件?,swift,enums,conditional-statements,operator-keyword,Swift,Enums,Conditional Statements,Operator Keyword,有没有办法在Swift中缩写以下类型的条件 if ( (myEnum == .1 || myEnum == .2 || myEnum == .3 || myEnum == .8) && startButton.isSelected ) 我试着打字: if ( (myEnum == .1 || .2 || .3 || .8) && startButton.isSelected ) 以及: 但这些都不起作用。我也试着查看文档,但找不到类似的例子 谢谢 我不认为

有没有办法在Swift中缩写以下类型的条件

if ( (myEnum == .1 || myEnum == .2 || myEnum == .3 || myEnum == .8) && startButton.isSelected ) 
我试着打字:

if ( (myEnum == .1 || .2 || .3 || .8) && startButton.isSelected ) 
以及:

但这些都不起作用。我也试着查看文档,但找不到类似的例子


谢谢

我不认为有一种方法可以像你想的那样缩写它,但是,也许有另一种方法可以处理同样的事情

extension YourEnum {
    var someCondition: Bool {
        switch self {
        case .1, .2, .3, .8:
            return true
        default:
            return false
        }
    }
}
通过这样做,您在呼叫站点的状态变为

if myEnum.someCondition, startButton.isSelected {
    doTheThing()
}
通过使用这种方法,您的代码也变得更具可读性。您现在可以给您的条件起一个合理的名字,其他开发人员(包括您未来的自己)将能够理解。以前我不知道为什么会选择这些案例


它还允许您在多个位置使用此条件,并且只有一个实现。因此,如果需求发生变化,您可以在一个地方进行更改。

对于这种情况,我喜欢使用John Sundell对equatable的扩展:

if [.a, .b, .c, .d].contains(myEnum) && startButton.isSelected {
    // etc.
}
extension Equatable {
    func isAny(of candidates: Self...) -> Bool {
        return candidates.contains(self)
    }
}
然后,您可以将其用作:

if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }

啊,我甚至没有想过这样扭转它:)唯一的区别是它会初始化一个额外的数组?@TheTiger这是一个非常小的数组,在执行行后不会被保持,所以应该没什么关系。@Fogmeister甚至我也忽略了这种数组,我只是在确认实际的差异。相关:。还有:。记住接受那些对你有帮助的答案。你有很多问题的答案,你的评论是正确的,但他们是不被接受的。它会回馈那些帮助你的人(你也会因为接受他们而得到名声):我会这样做的。在这种情况下,我犹豫不决,因为虽然你的答案对我来说是最有帮助和最明智的,但其他人的回答是技术上正确的,这正是我最初寻找的答案。。。但我会和你一起去,因为这毕竟是我的决定。@BooberBunz绝对。我没有压力。我只是注意到你的很多问题还在等着:-)请随意接受任何你喜欢的答案。我想要一个更好的,然后也换成:-)
if myEnum.isAny(of: .1, .2, .3, .8) && startButton.isSelected { .. }