Wie verwenden Sie eine switch-Anweisung mit einer verschachtelten enum?

8

Ich erhalte einen Fehler in der switch-Anweisung unten für path .

  

Enum case Search ist kein Member vom Typ Instagram

%Vor%

Ich möchte eine switch-Anweisung verwenden, um den Pfad zurückzugeben, aber die Fälle geben mir Fehler. Kann es irgendwie funktionieren?

Dies verwendet erweiterte Enums: Ссылка

    
efremidze 16.01.2016, 00:58
quelle

4 Antworten

10

Wenn Sie einen zugeordneten Wert für die verschachtelte Enumeration hinzufügen, können Sie darauf mit einer switch-Anweisung zugreifen.

%Vor%     
efremidze 19.01.2016, 20:30
quelle
15

Ich füge aus einigen Gründen eine allgemeinere Antwort hinzu.

  1. Dies ist die einzige offene Frage bezüglich verschachtelter Enums und Switch-Anweisungen. Der andere ist leider geschlossen .
  2. Die einzige zulässige Antwort zeigt nicht, wie der Wert einer verschachtelten Enumeration einem Symbol zugewiesen wird. Die Syntax war für mich nicht intuitiv.
  3. Keine der anderen Antworten enthält umfangreiche Fallbeispiele.
  4. Eine enum-verschachtelte 3-Ebenen-Tiefe veranschaulicht die erforderliche Syntax. Mit der obigen Antwort von efremidze habe ich noch eine Weile gebraucht, um es auszuarbeiten.

Ein Beispiel:

%Vor%     
Jeff 24.01.2017 13:22
quelle
4

Es gibt ein paar Probleme mit Ihrer Architektur. Sie sollten wissen, wann und warum Sie Erweiterungen und Protokolle verwenden müssen und wie Sie Ihre Code-Blöcke strukturieren sollten.

  1. Wenn Ihr Typ diesem Protokoll entsprechen muss, können Sie ihn verwenden stellen Sie sicher, dass Sie Ihre eigenen Standards setzen. Das sehe ich im github-Projekt nicht einmal.
  2. Erweiterung ist eine gute Möglichkeit, einen primitiven Typ zu verwenden und seine Funktionalität in anderen Teilen des Projekts zu erweitern. Es macht für mich keinen Sinn, warum man den Typ gleich nach der Deklaration erweitern sollte. Ein guter Anwendungsfall davon ist, wenn der String-Typ erweitert wurde, um URL-codierte Werte zu unterstützen:
%Vor%
  1. Wenn Sie diese Art von Schalterblock verwenden,
%Vor%

Der Wert in diesem Fall sollte ein Mitglied von self sein. deshalb kann es den Typ nicht finden. Der Typ wird in Instagram enum deklariert, aber er enthält keinen Wert im Selbst. es hält Wert in Media. Verschieben Sie also Ihre medienbezogene Funktion in die Deklaration von Medien und greifen Sie dort auf sie zu. So bezieht sich das Selbst auf Medien. Hier ist der vollständige Arbeitscode für mich:

%Vor%

}

var me = Instagram.Media.Search ("ich") drucken (me.path)

  1. Als einen Ratschlag sollten Sie sich in jedem Schritt beim Aufbau Ihrer gesamten Architektur fragen, ob dieser Code zu diesem Typ gehört oder öffentlich zugänglich sein soll. In diesem Fall ist es sinnvoll, die Suche nach Medien zu verschieben, weil Sie nach Medien suchen. Sie können das gleiche Muster für etwas wie Benutzer hinzufügen und haben eine Suche unter Benutzer, der einen anderen Wert zurückgibt.
MKoosej 16.01.2016 02:39
quelle
1
  

Die Groß- / Kleinschreibung Die Suche ist kein Mitglied des Typs Instagram

Wie der Compiler sagt, ist Search kein Mitglied vom Typ Instagram . Es ist nur eine Aufzählung im Bereich von Instagram . Sie müssen ein Mitglied erstellen, das eine Instanz von Search in Instagram

ist %Vor%     
anhtu 16.01.2016 02:38
quelle

Tags und Links