So spezialisieren Sie eine generische Enumeration in Swift

8

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:

%Vor%

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?

    
tarmes 29.05.2015, 07:45
quelle

3 Antworten

2

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?

    
tbondwilkinson 25.01.2016 22:04
quelle
1

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.

RawRepresentable

Aus der Apple-Dokumentation :

  

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.

%Vor%

Das heißt, Ihr Rohwert muss Result<T, NSError> :

sein %Vor%

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.

    
Wallace Campos 28.01.2016 16:07
quelle
0

Sie könnten den spezifischen Ergebnistyp als Alias ​​verwenden, sodass Sie func myThing() -> Result<String, NSError>

nicht ständig ausführen müssen

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.

    
DerailedLogic 26.01.2016 02:20
quelle

Tags und Links