2017-02-11 100 views
0

考虑:我可以在不使用switch语句的情况下测试枚举值是否为特定情况吗?

enum Test { 
    case foo 
    case bar 
    case baz 
    case etc 
} 

var test: Test = ... 

我想测试枚举是否在特定bar。我可以只使用一个开关语句:

switch test { 
case .bar: 
    doSomething() 
default: 
    break 
} 

这将是很整齐,如果我可以改用if

if test == .bar { 
    doSomething() 
} 

但除非我失去了一些东西,有没有办法做到这一点:

Binary operator '==' cannot be applied to two 'Test' operands

这是可能的,如果不是,这是一个深思熟虑的语言设计决策?

+1

你的代码编译罚款'Test'没有任何相关的值(仅斯威夫特没有synthesises相关的值'Hashable'一致性对枚举)。请向我们展示您的真实代码。 – Hamish

+0

假设实际代码中的'Test'确实有相关的值 - 可能的重复[如何通过忽略Swift中的相关值来比较enum和相关值?](http://stackoverflow.com/q/31548855/2976878 )。另请参见[如何测试Swift枚举与关联值的相等性](http://stackoverflow.com/q/24339807/2976878) – Hamish

+0

@Hamish:对不起,是的,我可以确认我的真实代码具有关联值。但是,我试图与没有的比较。假设'baz'和'etc'具有相关的值,但是'foo'和'bar'不具有相关的值。 – user280993

回答

2

可以使用if-case操作

if case .foo = test { 
    doSomething() 
} 
相关问题