2016-07-12 13 views
0

Ich habe eine Enumeration wie folgt definiert:Vergleich Aufzählungen gibt Fehler

enum LocationState : Equatable { 
    case Idle 
    case RetrievingLocation 
    case RetrievedLocation(CLLocation) 
    case PermissionsDenied(String) 
    case LocationUnavailable(NSError) 
} 

Ich habe die gleichzusetzen Protokollfunktion hinzugefügt, wie

func == (lhs: LocationState, rhs: LocationState) -> Bool { 
    return lhs == rhs 
} 

folgt Jetzt will ich, ob eine Variable bestimmen, die eine ENUM hält ist gleich einem bestimmten eNUM:

let locationAvailable = locationManager.getCurrentState() != .LocationUnavailable(_) 

jedoch gibt dies den Fehler '_' can only appear in a pattern or on the left side of an assignment.

Wie behebe ich das?

Antwort

1

Sie müssen einen Wert übergeben, wenn Sie einen Vergleich mit der Enumeration mit den zugehörigen Werten durchführen.

Ich würde vorschlagen, die Erklärung der Enumeration zu folgenden Änderungen:

enum LocationState : Equatable { 
    case Idle 
    case RetrievingLocation 
    case RetrievedLocation(Int) 
    case PermissionsDenied(String) 
    case LocationUnavailable(NSError?) 
} 

Und dann vergleichen Sie auf folgende Weise:

Sie
let locationAvailable = locationManager.getCurrentState() != .LocationUnavailable(nil) 

Falls gegen bestimmte Fehler vergleichen wollen, Sie müssen es als Argument übergeben:

let locationAvailable = locationManager.getCurrentState() != .LocationUnavailable(myError) 
0

Zeile ersetzen

let locationAvailable = locationManager.getCurrentState() != .LocationUnavailable(_) 

mit

let e : NSError! 
let locationAvailable = locationManager.getCurrentState() != LocationState.LocationUnavailable(e)