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
聲明感覺過於冗長:我只是想爲.FirstCase
,沒有其他的東西。一個if
聲明更有意義。
怎麼回事enums和==
?
編輯:這是非常奇怪的。在解決了switch
版本並轉到我的代碼的其他(完全不相關)部分並返回之後,if
-聲明版本(針對固定枚舉大小寫的解壓縮屬性)正在編譯時沒有錯誤。 我只能得出結論,它與解析器中一些被破壞的緩存有關。
EDIT 2(感謝@LeoDabus和@MartinR):看來,當我相關的值設置爲其他枚舉的情況下(不是一個我比較反對出現錯誤 - 在這種情況下,。 SecondCase)。我仍然不明白爲什麼會特別觸發這個編譯器錯誤(「不能使用二元運算符=='...」),或者這意味着什麼。
您忘記了初始化狀態,並且正在強制解包它。 add guard let state = else else {return} –
這是虛擬代碼,類型和變量名稱已更改,大多數方法都被省略。在我的真實代碼中,var **被初始化。無論是哪種情況,最多都應該是運行時問題。實際上,我正在測試'viewDidLoad()'中的值,編譯器無法知道它是否被初始化。 –
您使用的是什麼Xcode版本?我在這裏沒有得到這個錯誤 –