Ich versuche, ein benutzerdefiniertes Musterabgleich zu schreiben, das es mir ermöglicht, einen Fehler zu aktivieren und mit dem Fehlercode übereinzustimmen. Im folgenden sehen Sie ein Beispiel:Benutzerdefinierte Mustererkennung schlägt fehl mit `Enum case ist kein Mitglied des Typs`
enum ErrorCode: Int {
case notSoDumb
case dumbError
}
let myError = NSError(domain: "My domain", code: ErrorCode.dumbError.rawValue, userInfo: nil)
func ~=(pattern: ErrorCode, value: NSError) -> Bool {
return (ErrorCode(rawValue: value.code) == pattern)
}
switch myError {
case ErrorCode.notSoDumb:
print("Not a dumb error")
case ErrorCode.dumbError:
print("Super dumb error")
default:
print("No matches!")
}
Der erste Fall in meinem switch-Anweisung einen Fehler von Enum case 'notSoDumb' is not a member of type 'NSError'
. Wenn ich die ErrorCode
Enum mit ganzen Zahlen ersetzen (und meine benutzerdefinierten ~=
Operator aktualisieren Int
s und NSError
s passen, funktioniert alles einwandfrei
Offensichtlich wird diese Fehlermeldung angezeigt Der Vergleich von "myError", das eine NSError-Instanz mit einem Int ist, sollte zu einem solchen Fehler führen ... Könnten Sie bitte versuchen, zu erklären, was Ihr Hauptzweck ist? –
Dies ist ein bekannter Fehler: https://bugs.swift.org/browse/SR-1121. Zuerst Zuweisen zu einer temporären Arbeit (z. B. "let notSoDumbErrorCode = ErrorCode.notSoDumb", dann 'case notSoDumbErrorCode:'). – Hamish
@Hamish können Sie bitte erklären, was ist das Problem hier? Ich nehme an, dass basierend auf der erwähnten switch-Anweisung ein solcher Fehler generiert werden sollte ... –