如何使用单个案例陈述检查枚举值及其相关枚举值?

时间:2017-05-02 19:48:58

标签: swift enums

请查看下面的switch语句。我正在寻找一种更加快速的方式来进行测试;类似的东西:

case let .b(other) where .x = other // This does not compile

有可能吗?

enum MyEnum {
    case a
    case b(MyOtherEnum)
}

enum MyOtherEnum {
    case x
    case y
}

func check(value: MyEnum) {
    switch value {
    case let .b(other):
        if case .x = other {
            print("Got it!")
        }
    default:
        break
    }
}

3 个答案:

答案 0 :(得分:2)

如果您只对案例MyEnum.b(.x)感兴趣而不感兴趣 然后你也可以if使用case模式:

func check(value: MyEnum) {
    if case .b(.x) = value {
        print("Got it!")
    }
}

答案 1 :(得分:1)

您需要使用==而不是=

case let .b(other) where .x == other 

这对我来说很好用:

func check(value: MyEnum) {
    switch value {
    case let .b(other) where other == .x:
        print("bx")
    case let .b(other) where other == .y:
        print("by")
    default:
        break
    }
}

check(value: MyEnum.b(.x)) // prints "bx"
check(value: MyEnum.b(.y)) // prints "by"

答案 2 :(得分:1)

func check(value: MyEnum) {
    switch value {
    case .b(.x):
        print("Got it!")
    case .b(_):
        print("Not it!")
    default:
        break
    }
}

let myVar = MyEnum.b(.x)
check(value: myVar)
// prints "Got it!"