是否可以将此条件缩写为 Swift?

Is it possible to abbreviate this condition in Swift?

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

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

我试着输入:

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

和:

if ( (myEnum == .1,.2,.3,.8) && startButton.isSelected )

但其中 none 有效。我也尝试查看文档,但找不到类似的示例。

谢谢!

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

extension YourEnum {
    var someCondition: Bool {
        switch self {
        case .1, .2, .3, .8:
            return true
        default:
            return false
        }
    }
}

通过这样做,您在呼叫站点的情况将变为...

if myEnum.someCondition, startButton.isSelected {
    doTheThing()
}

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

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

if [.a, .b, .c, .d].contains(myEnum) && startButton.isSelected {
    // etc.
}

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

extension Equatable {
    func isAny(of candidates: Self...) -> Bool {
        return candidates.contains(self)
    }
}

然后您可以将其用作:

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