可以在Swift中缩写这个条件吗?

Boo*_*unz 0 enums conditional-statements operator-keyword swift

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

if ( (myEnum == .1 || myEnum == .2 || myEnum == .3 || myEnum == .8) && startButton.isSelected ) 
Run Code Online (Sandbox Code Playgroud)

我试着输入:

if ( (myEnum == .1 || .2 || .3 || .8) && startButton.isSelected ) 
Run Code Online (Sandbox Code Playgroud)

和:

if ( (myEnum == .1,.2,.3,.8) && startButton.isSelected )
Run Code Online (Sandbox Code Playgroud)

但这些都没有奏效.我也试过看文档,但找不到类似的例子.

谢谢!

Fog*_*ter 8

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

extension YourEnum {
    var someCondition: Bool {
        switch self {
        case .1, .2, .3, .8:
            return true
        default:
            return false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,您在呼叫站点的条件变为......

if myEnum.someCondition, startButton.isSelected {
    doTheThing()
}
Run Code Online (Sandbox Code Playgroud)

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

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


rob*_*off 5

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