列挙型があります:
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")
}