class MyClass
{
enum MyEnum {
case FirstCase
case SecondCase(Int)
case ThirdCase
}
var state:MyEnum!
func myMethod ()
{
if state! == MyEnum.FirstCase {
// Do something
}
}
}
if
ステートメントを指すコンパイラ エラーが発生します::
二項演算子 '==' は 2 つの '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
ステートメントは冗長すぎるように感じます。I just want to do something
for .FirstCase
, and nothing other. 声明はより理にif
かなっています。
列挙型と で何が起こっているの==
ですか?
編集:これは非常に奇妙です。switch
バージョンを決定し、コードの他の (まったく関係のない) 部分に移動して戻ってきた後、-statementif
バージョン (強制的にラップ解除されたプロパティと固定された列挙型のケースを比較) はエラーなしでコンパイルされます。途中でクリアされたパーサーの破損したキャッシュと関係があるとしか結論付けられません。
EDIT 2(@LeoDabusと@MartinRに感謝):関連付けられた値を他の列挙型ケース(比較しているものではなく、この場合は.SecondCase)に設定するとエラーが表示されるようです。特にこのコンパイラ エラーが発生する理由 (「2 項演算子 '==' を使用できません...」)、またはそれが何を意味するのかはまだわかりません。