这个问题已经有了答案:
complementery of an if case
1个答案
有没有办法将case .A = enumValue转化为类似于enumValue != .A的形式?

enum MyEnum {
    case A
    case B
    case C
    case D(something: OtherEnum)
}

let enumValue: MyEnum = ...
let otherValue: String = ...

if case .A = enumValue {
    // Do nothing
} else {
    if otherValue == "something" {
        // Do stuff...
    } else {
        // Do other stuff...
    }
}

// More code...

我正在尝试删除空if块并减少行数,所以我不想查找类似的内容
var condition1 = true
if case .A = enumValue {
    condition1 = false
}

if condition1 {
    // ...
}

最佳答案

相等的
首先,您需要使您枚举Equatable

enum MyEnum: Equatable {
    case A
    case B
    case C
    case D(something: OtherEnum)
}
func ==(left:MyEnum, right:MyEnum) -> Bool {
    return true // replace this with your own logic
}

警卫
现在,您的方案非常适合Guard语句
func foo() {
    guard enumValue != .A else { return }

    if otherValue == "something" {
        // Do stuff...
    } else {
        // Do other stuff...
    }
}

在上面的代码中,如果enumValue != .A则代码流继续。
否则(当enumValue == .A时)执行停止并执行。

关于swift - Swift中的枚举“如果不是大小写”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38771994/

10-12 16:57