Ich verwende das Paket antitypical / result , um einen generischen Ergebnistyp anzugeben. Dieses Paket definiert das Ergebnis wie folgt:
%Vor% Nun möchte ich nur Fehler vom Typ NSError
in meinem Code zurückgeben, also wäre es schön, wenn ich die Dinge nicht weiter machen müsste:
Stattdessen möchte ich einen abgeleiteten StdResult-Typ erstellen, so dass ich dies stattdessen tun kann:
%Vor%Ich habe verschiedene Dinge ausprobiert, aber ich kann keine Lösung finden. Dies funktioniert zum Beispiel nicht:
%Vor%Gibt es eine Lösung, die funktioniert?
Leider sind wir hier ziemlich begrenzt. Swift unterstützt keine generischen Typalias, also können wir das als eine Art Hack mit struct machen:
%Vor%Passt das genau zu dem, wonach Sie gesucht haben?
Im Moment gibt es weder generische typalias Unterstützung noch Enumerationsvererbung, aber Sie könnten RawRepresentable
protocol verwenden. Es ist nicht so einfach, als ob eine generische Typalias existiert, aber es kann Ihren Bedürfnissen entsprechen.
Aus der Apple-Dokumentation :
%Vor%Ein Typ, der in einen zugeordneten "Raw" -Typ konvertiert werden kann und dann zurück konvertiert werden kann, um eine Instanz zu erzeugen, die dem Original entspricht.
Das heißt, Ihr Rohwert muss Result<T, NSError>
:
Hinweis : Eigenschaften und Methoden der ursprünglichen Result
-Enumeration sind nur , auf die Sie über die rawValue
-Eigenschaft zugreifen können. Wenn Sie also beispielsweise Ihre neue% -Angabe vergleichen möchten, co_de% mit einem anderen, Sie müssen StdResult
property verwenden oder diese Protokolle selbst implementieren.
Sie könnten den spezifischen Ergebnistyp als Alias verwenden, sodass Sie func myThing() -> Result<String, NSError>
z.B.
%Vor%Es ist schwieriger für mich, eine generische Lösung wie
zu finden %Vor% ohne genau zu wissen, was Result
tut. Ich könnte einen weiteren Fehler machen, wenn Sie einige der Interna veröffentlichen.