2017-02-11 30 views
0

は考えてみましょう:switch文を使用せずにenum値が特殊なケースかどうかをテストできますか?

enum Test { 
    case foo 
    case bar 
    case baz 
    case etc 
} 

var test: Test = ... 

私は列挙型は特にbarであるかどうかをテストしたいと思います。私は、switchステートメントを使用することができます。

switch test { 
case .bar: 
    doSomething() 
default: 
    break 
} 

私が代わりにifを使用することができればそれははるかに滑らかな印象になります:

if test == .bar { 
    doSomething() 
} 

しかし、私は何かが欠けていない限り、それをする方法はありません。

Binary operator '==' cannot be applied to two 'Test' operands

が可能これは、そうでない場合は、この意図的な言語の設計上の決定でしたか? Test`は、任意の関連する値を持っていない `として

+1

あなたのコードは罰金コンパイルif-caseオペランドを使用することができます。実際のコードを表示してください。 – Hamish

+0

実際のコードで 'Test'を実行すると、実際に値が関連付けられています - [Swiftで関連付けられた値を無視して関連する値と列挙型を比較す​​る方法は?](http://stackoverflow.com/q/31548855/2976878) )。 [関連する値を持つスウィフト列挙型の等価性をテストする方法]も参照してください。(http://stackoverflow.com/q/24339807/2976878) – Hamish

+0

@Hamish:申し訳ありませんが、実際のコードには値が関連付けられていることがあります。しかし、私は比較しないものと比較しようとしています。 'baz'と' etc'には値がありますが、 'foo'と' bar'は値を持っていないとします。 – user280993

答えて

2

あなたは(スウィフトは唯一の関連する値のない列挙型のための` Hashable`適合を合成)

if case .foo = test { 
    doSomething() 
} 
関連する問題