【发布时间】:2017-02-11 23:57:22
【问题描述】:
考虑:
enum Test {
case foo
case bar
case baz
case etc
}
var test: Test = ...
我想特别测试一下枚举是否是bar。我可以只使用 switch 语句:
switch test {
case .bar:
doSomething()
default:
break
}
如果我可以改用if,那就更简洁了:
if test == .bar {
doSomething()
}
但除非我遗漏了什么,否则没有办法做到这一点:
Binary operator '==' cannot be applied to two 'Test' operands
这可能吗?如果不可能,这是经过深思熟虑的语言设计决定吗?
【问题讨论】:
-
您的代码编译得很好,因为
Test没有任何关联的值(Swift 只为没有关联值的枚举合成Hashable一致性)。请向我们展示您的真实代码。 -
假设您的真实代码中的
Test实际上具有相关值 - 可能与 How to compare enum with associated values by ignoring its associated value in Swift? 重复。另见How to test equality of Swift enums with associated values -
@Hamish:抱歉,是的,我可以确认我的真实代码在某些情况下具有关联值。但是,我试图与没有的人进行比较。假设
baz和etc有关联的值,但foo和bar没有。 -
在这种情况下 - How to test equality of Swift enums with associated values 的可能重复 :)