我可以在不使用switch语句的情况下测试枚举值是否为特定情况吗?
问题描述:
考虑:我可以在不使用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
这是可能的,如果不是,这是一个深思熟虑的语言设计决策?
答
可以使用if-case
操作
if case .foo = test {
doSomething()
}
你的代码编译罚款'Test'没有任何相关的值(仅斯威夫特没有synthesises相关的值'Hashable'一致性对枚举)。请向我们展示您的真实代码。 – Hamish
假设实际代码中的'Test'确实有相关的值 - 可能的重复[如何通过忽略Swift中的相关值来比较enum和相关值?](http://stackoverflow.com/q/31548855/2976878 )。另请参见[如何测试Swift枚举与关联值的相等性](http://stackoverflow.com/q/24339807/2976878) – Hamish
@Hamish:对不起,是的,我可以确认我的真实代码具有关联值。但是,我试图与没有的比较。假设'baz'和'etc'具有相关的值,但是'foo'和'bar'不具有相关的值。 – user280993