class MyClass
{
enum MyEnum {
case FirstCase
case SecondCase(Int)
case ThirdCase
}
var state:MyEnum!
func myMethod ()
{
if state! == MyEnum.FirstCase {
// Do something
}
}
}
我得到指向if
语句的编译器错误::
二元运算符“==”不能应用于两个“MyClass.MyEnum”操作数
如果相反,我使用一个switch
语句,则没有问题:
switch state! {
// Also, why do I need `!` if state is already an
// implicitly unwrapped optional? Is it because optionals also
// are internally enums, and the compiler gets confused?
case .FirstCase:
// do something...
default:
// (do nothing)
break
}
然而,这switch
句话感觉太冗长了:我只想do something
for .FirstCase
,没有别的。if
声明更有意义。
枚举和发生了==
什么?
编辑:这太奇怪了。在确定switch
版本并转到我的代码的其他(完全不相关的)部分并返回后,if
-statement 版本(将强制展开的属性与固定的枚举大小写进行比较)正在编译,没有错误。我只能得出结论,这与解析器中的一些损坏的缓存有关,这些缓存在此过程中被清除了。
编辑2 (感谢@LeoDabus 和@MartinR):当我将关联值设置为另一个枚举案例(不是我要比较的那个 - 在这种情况下为.SecondCase)时,似乎出现了错误。我仍然不明白为什么会特别触发这个编译器错误(“不能使用二元运算符'=='...”),或者这意味着什么。