Swift verwenden, wenn auf einer enum-wodurch Fehler nicht konvertierbar '_ArrayCastKind'
Ich bin mit der Beta 3 von xcode 6, und ich bin mit einem problem zu tun, eine einfache if-Anweisung gegen ein enum übergeben, in ein argument für eine Schließung. Hier ist die einfache enum-definition:
enum FLSTeslaLoginStatus {
case LoggedOut
case LoggedIn
case LoggingIn
case LoginFailed(NSData!, NSHTTPURLResponse!, NSError)
}
Ist und der code mit dem Fehler:
Wie Sie sehen können die switch-Anweisung funktioniert gut, aber wenn der check führt zu dem Fehler. Dies ist nur eine test-code, damit ich nicht haben in der Regel einen switch und einer if-Anweisung, aber ich versuche, herauszufinden, was falsch mit der if-Anweisung. Ich denke es ist ein compiler-bug.
Unterstützt wird dies in Swift 2.0 mit dem Gebrauch von "wenn-Fall".
- sieht aus wie wenn irgendein Fall von der enum verknüpft haben, Wert verwenden, müssen Sie die switch-Anweisung, um es zu testen. Zeit, einen bug-report erstellen (zumindest die Fehlermeldung müssen aussagekräftig sein). Bekomme auch die gleichen Fehler beim vergleichen der enum-zu sich selbst. also
t == t
. - Komischerweise bekomme ich die Fehlermeldung, wenn ich den shortcut
.LoggedIn
, aber wenn es nicht voll qualifiziert ist. - Es ist fast sicher ein Fehler, die Datei radar.
- Kevin, bekomme ich die gleiche. Funktioniert gut, wenn Sie vollständig qualifiziert sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Swift 2.x ermöglicht dies über die if-Fall-Muster-übereinstimmung: https://www.natashatherobot.com/swift-2-pattern-matching-with-if-case/
In dieser Zeit (iOS8 Beta 4) es scheint, dass Sie brauchen, um vollständig zu-Qualität der enum-Wert, wenn dabei ein = = - Vergleich.
OK:
Fehler: "TaskSortOrder' nicht konvertierbar 'Selector'"
Passiert es in meinem enum Beispiel auch, aber ich bin mit Int-Typ
Aber! ... seltsamerweise mit nicht-operator im if-Anweisung mit begleitenden sonst funktioniert es:
Es ist ein bisschen hässlich, aber eher anderes mehr, als den ganzen wechseln Immobilien nur für einen line-check.
Sollen Sie sich die Verwendung der switch-Anweisung mit enums.