'if case' ステートメントの NOT 条件 質問する

'if case' ステートメントの NOT 条件 質問する

列挙型があります:

enum E {
    case A, B, C(Int)
}

let a: E = .A

a等しいかどうかをチェックする方法は次のとおりです.B

if case .B = a {
    // works fine
}

しかし、反対の条件をどのように確認するのでしょうか?(a ない等しいです.Bか?私が試したのは次の通りです:

if case .B != a { // Variable binding in a condition requires an initializer
    // ...
}

if !(case .B = a) { // Expected ',' separator
    // ...
}

もちろん、次のようにすることもできます:

if case .B = a {
    // ...
} else {
    // put your code here
}

しかし、これは using ステートメントと同様に扱いにくいですswitch。もっと良い選択肢はありますか?


編集:@Greg が提案した解決策は、ケースに関連付けられた値がない場合には機能しますが、関連付けられている場合は==演算子をオーバーロードする必要があります。最初にこれを明確にしなかったことをお詫びします。

ベストアンサー1

この「答え」は、気まずいelseよりコンパクトな方法でソリューションを提供します。値が特定の列挙値ではない場合のみを対象とする場合は、空の then 句の直後に、次のように 1 行で記述できます。

enum E {
    case A, B(String), C(Int)
}

let a: E = .B("Hello")

if case .A = a {} else {
    print("not an A")
}

if case .B = a {} else {
    print("not a B")
}

if case .C = a {} else {
    print("not a C")
}

おすすめ記事