Enumで比較がなぜかできない時の対処法
こんばんは、りーさんです!
Enumでif文を使おうと思ったら、いつもは使えたのにエラーで使えない時がありました。その記録を下記に記していこうと思います。
発生したエラーはこちらです。
なんだこれは。。。。となって調べてみると
関連型enumのがついているとコンパイルエラーになるらしい。
例えば下記のような書き方になります。
enum type {
case type1
case type2
case type3(String) ←これが原因
}
class sampleClass {
var viewModelType: type = .type1
func switchType() {
if viewModelType == .type1 { ← コンパイルエラーになる
print("変わりました。")
}
}
}
逆にこのように値が無ければ、エラーにならない。
enum type {
case type1
case type2
case type3 ←値なし
}
class sampleClass {
var viewModelType: type = .type1 ← エラーは起きない。
func switchType() {
if viewModelType == .type1 {
print("変わりました。")
}
}
}
こちらの関連型enumで比較するための解消法は下記になります。
enum type {
case type1
case type2
case type3(String)
}
class sampleClass {
var viewModelType: type = .type1
func switchType() {
if case type.type1 = viewModelType { ← こちらに変更する
print("変わりました。")
}
}
}
if caseを使うことで先に左辺にタイプを指定して、右辺に変数のviewModelTypeを指定することで、コンパイルエラーなく、type1の時にこういう処理をするなどを書くことが可能になります。