2016-06-15 17 views
1

このコードを動作させたいと思います。格納された列挙型の条件付き列挙型スイッチ

ケースDirection.Rightに距離パラメータを取る列挙型があります。

enum Direction { 
    case Up 
    case Down 
    case Left 
    case Right(distance: Int) 
} 

ここで、Directionパラメータをとることができる別の列挙型です。

enum Blah { 
    case Move(direction: Direction) 
} 

let blah = Blah.Move(direction: Direction.Right(distance: 10)) 

私は条件付きでこのようMove.Rightに切り替えることができるようにしたいBlah列挙型に切り替える...

switch blah { 
case .Move(let direction) where direction == .Right: 
    print(direction) 
default: 
    print("") 
} 

しかし、私はエラーを取得...

「==」「_」タイプ「方向」のオペランドに適用することができず、バイナリ演算子

これを行う方法はありますか?

+1

あなたの '.Move(方向を向ける)方向== .Up:'は私のためにうまくいきます。 –

+0

@MartinR hmm .. 'バイナリ演算子==は、方向型と_'型のオペランドにそれを適用することはできません。しかし、クリーンでビルドに問題があるかもしれません。どうもありがとうございます。 – Fogmeister

+0

@MartinRああ、Directionに 'distance'を追加すると間違っているようです。編集しましょう... – Fogmeister

答えて

6

それは実際には非常に簡単です:)

case .Move(.Up): 
     print("up") 
    case .Move(.Right(let distance)): 
     print("right by", distance) 

==が関連する値なしのみ 列挙にデフォルトで定義されているので、あなたのコード

case .Move(let direction) where direction == .Right: 

がコンパイルされません。

+0

優秀です。完璧な意味合いも作ります。パラメータを編集しようとしました。ありがとう – Fogmeister