2016-06-15 12 views
1

Ich möchte, dass dieser Code funktioniert.Bedingter Enum-Schalter mit gespeicherter Enum

Ich habe eine enum, wo der Fall Direction.Right einen Abstandsparameter nimmt.

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

Jetzt ein anderes Enum, das einen Direction-Parameter nehmen kann.

enum Blah { 
    case Move(direction: Direction) 
} 

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

Wenn ich auf dem Blah Enum wechseln möchte ich in der Lage sein, bedingt wie dies auf dem Move.Right zu wechseln ...

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

Aber ich bekomme die Fehlermeldung ...

Binäroperator ‚==‘ nicht auf Operanden vom Typ ‚Richtung‘ angewendet werden kann, und ‚_‘

Gibt es eine Möglichkeit, dies zu tun?

+1

Ihre 'case.Move (Richtung) wo Richtung == .Up:' funktioniert gut für mich. –

+0

@MartinR hmm .. Ich bekomme 'Binary Operator == kann nicht auf Operanden des Typs Richtung und _' mit dem angewendet werden. Kann jedoch ein sauberes und Build-Problem sein. Ich werde einen Blick darauf werfen. – Fogmeister

+0

@MartinR ah, es scheint, wenn Sie eine Distanz zur Richtung hinzufügen, dann geht es schief. Lass mich bearbeiten ... – Fogmeister

Antwort

6

Es ist eigentlich ganz einfach :)

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

Ihr Code

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

nicht kompilieren, weil == standardmäßig für Aufzählungen ohne zugehörigen Werte nur definiert ist.

+0

Ausgezeichnet. Macht auch Sinn. War im Begriff, in dem Parameter zu bearbeiten. Danke: D – Fogmeister