見出し画像

Enumで比較がなぜかできない時の対処法

こんばんは、りーさんです!
Enumでif文を使おうと思ったら、いつもは使えたのにエラーで使えない時がありました。その記録を下記に記していこうと思います。

発生したエラーはこちらです。

Binary operator '==' cannot be applied to two 'type' operands
二項演算子 '==' は 2 つの 'type' オペランドに適用できません

なんだこれは。。。。となって調べてみると
関連型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の時にこういう処理をするなどを書くことが可能になります。

この記事が気に入ったらサポートをしてみませんか?