2017-05-02 5 views
2

下記のswitch文をご覧ください。私はテストを実行するためのより賢い方法を探しています。次のようなもの:enumの値と関連する列挙型の値を1つのcase文で確認するにはどうすればよいですか?

case let .b(other) where .x = other // This does not compile 

可能でしょうか?

enum MyEnum { 
    case a 
    case b(MyOtherEnum) 
} 

enum MyOtherEnum { 
    case x 
    case y 
} 

func check(value: MyEnum) { 
    switch value { 
    case let .b(other): 
     if case .x = other { 
      print("Got it!") 
     } 
    default: 
     break 
    } 
} 

答えて

1
func check(value: MyEnum) { 
    switch value { 
    case .b(.x): 
     print("Got it!") 
    case .b(_): 
     print("Not it!") 
    default: 
     break 
    } 
} 

let myVar = MyEnum.b(.x) 
check(value: myVar) 
// prints "Got it!" 
+0

ありがとう、ありがとう – Verticon

1

あなたが==を使用する必要はありませ=

case let .b(other) where .x == other 

これが私のために正常に動作します:

func check(value: MyEnum) { 
    switch value { 
    case let .b(other) where other == .x: 
     print("bx") 
    case let .b(other) where other == .y: 
     print("by") 
    default: 
     break 
    } 
} 

check(value: MyEnum.b(.x)) // prints "bx" 
check(value: MyEnum.b(.y)) // prints "by" 
+0

はスコット – Verticon

2

あなたはケースMyEnum.b(.x)なしその他にのみ関心がある場合 の場合は、012とifを使用することもできますパターン:

func check(value: MyEnum) { 
    if case .b(.x) = value { 
     print("Got it!") 
    } 
} 
+0

は、マーティンをありがとう、ネイサン – Verticon

関連する問題