2016-09-10 3 views

Antwort

24

Das Problem ist, dass Sie Ihren Fehlertyp Error benannt haben - der mit der Standardbibliothek Error Protokoll in Konflikt steht (daher Swift glaubt, Sie haben eine Zirkelreferenz).

Sie sind mit dem Swift Error Protokoll als Swift.Error, um eindeutig zu machen verweisen konnte:

enum Error : Swift.Error { 
    case NotFound 
} 

Aber dies bedeutet, dass alle zukünftigen Referenzen auf Error in Ihrem Modul IhreError Art beziehen, nicht die Swift Error Protokoll (Sie müssen wieder disambiguate).

Daher ist die einfachste Lösung bei weitem die Umbenennung Ihres Fehlertyps in etwas Beschreibenderes.

+1

Also, in der alten Version, wäre ich nicht in der Lage gewesen, meinen enum ErrorType zu nennen, aber jetzt, dass der Swift-Protokollname in Fehler geändert wurde, kann ich Fehler nicht verwenden, richtig? – Shades

+2

@Shades Yup, das ist richtig - wenn Sie in Ihren Build-Einstellungen (die Swift 2.3 verwenden) die Option "Ältere Swift-Sprachversion verwenden" auf "Ja" stellen, können Sie es selbst ausprobieren. – Hamish

2

Dieser Fehler tritt auf, weil Sie die vorhandene Deklaration von Error "überschreiben", die eine ist. Sie müssen also einen anderen (wahrscheinlich beschreibenden) Namen für Ihren "Fehler" enum wählen.

1

Ich habe dieses Problem auch, obwohl ich meine Enum mit bestimmten Namen deklariert.

Der Grund ist, dass ich Realm verwende und es hat Error Klasse, die die verwirrend zwischen Swift.Error und RealmSwift.Error macht.

Die Lösung gibt RealmSwift.Error in der Deklaration an. auf Fehler

// before 
enum MyError: Error { ... } 
// after 
enum MyError: Swift.Error { ... } 
0

habe ich versucht, diesen Block in einer AVCapture Sitzung und es funktioniert in Swift 3 + iOS 10. NSError als RawValue verwenden könnte begegnen, was Hamish oben in Bezug auf zukünftige Referenzen bezog.

Verwandte Themen