2016-09-05 2 views
8

私はif case文で複数のcaseとのパターンマッチングを行う構文を探しています。 .Male OR .Femaleであれば、複数のケースとパターンマッチングする方法は?

enum Gender { 
    case Male, Female, Transgender 
} 

let a = Gender.Male 

は、今、私が確認したい: の例は、これになります。しかし、私はこのためにスイッチを使用しないでください。ただし、switch文は次のようになります。

switch a { 
case .Male, .Female: 
    // do something 
} 

この場合は書き込み可能ですか? は、私はこれを期待するが、それはうまくいきませんでした:(あなたはまだ動作しません記述するどのようなパターンマッチングに

if case .Male, .Female = a { 

} 
+0

あなたはjsでコレクションを使うべきです: 'if([Gender.Male、Gender.Female] .includes(actualGender))'のようなものを書くでしょう。 – inf3rno

+0

私の知る限り、これは不可能です。私はしばらく前に[機能リクエスト](https://bugs.swift.org/browse/SR-4644)を作成しました。 – Raphael

答えて

0

、あなたはあなたのケースでこれを行うことができます。しかし、それができない場合hashValueに変換します。そして、これはどちらか動作しないでしょう

// Using Pattern Matching for more than one case. 
if case 0...2 = a.hashValue { 
    print("Hello") 
} 

//Normal if else 
if a == .Male || a == .Female { 
    print("Hello") 
} 
+0

はい、これは動作しますが、パターンマッチングはありません。私がチェックしたい3つ以上のケースがあるとします。この目的のために使用できる構文はありませんか? – Ben

+0

ああ、すみません、私はそれを誤読しました。私が知っていることから、あなたが描写しているもののパターンマッチングはありません。しかし、hashValueを使用するパターンがあなたのケースで動作する可能性があります。私は私の答えを更新します。 –

+0

この場合、オプションとしてhashValueが表示されません。たぶん私はまだそこに構文がない場合は、提案を書くべきである:) – Ben

-4

あなたは、コレクションを使用する必要がありますJavaScriptでは、私はこのような何かを記述します。

if ([Gender.Male, Gender.Female].includes(actualGender)) 
    console.log(actualGender); 

なお、私はhttps://stackoverflow.com/a/25391725/607033:ので、ここでは、その言語で同じことを行う方法を迅速についての手掛かりを持っていない、またはすることはトピックの関連答えであるD

EDIT:これはスウィフトバージョンです:

if [.Male, .Female].contains(a) { 

} 
0

Aシンプルな配列は、トリックを行います:

if [.Male, .Female].contains(a) { 
    print("Male or female") 
} else { 
    print("Transgender") 
} 

私はSwiftの推論能力に驚いています。ここでは、.Male.Femaleは性別でaです。

+3

これは、enumが 'Equatable'の場合にのみ機能します。任意のケースに関連する値を持つ列挙型は、手動で実装することはありません。 – rgeorge

+1

@rgeorgeそれ以上の機能が必要な場合は、いつでも関数を書くことができます。 – inf3rno

関連する問題