Access String-Wert in enum ohne Verwendung von rawValue

8

Ich möchte meine globalen Stringkonstanten durch eine verschachtelte Enumeration für die Schlüssel ersetzen, die ich für den Zugriff auf Spalten in einer Datenbank verwende.

Die Struktur ist wie folgt:

%Vor%

Jede Tabelle in der Datenbank ist eine innere Aufzählung, wobei der Name der Tabelle der Titel der Aufzählung ist. Der erste Fall in jeder Enumeration ist der Name der Tabelle, und die folgenden Fälle sind die Spalten in seiner Tabelle.

Um das zu verwenden, ist es ziemlich einfach:

%Vor%

Aber ich werde diese Enums viel verwenden. An jede Instanz .rawValue anhängen zu müssen, wird ein Schmerz sein, und es ist nicht so lesbar, wie ich es gerne hätte. Wie kann ich auf den String-Wert zugreifen, ohne rawValue verwenden zu müssen? Es wäre großartig, wenn ich das tun könnte:

%Vor%

Beachten Sie, dass ich Swift 2 verwende. Wenn es einen noch besseren Weg dafür gibt, würde ich es gerne hören!

    
Joey 30.08.2015, 16:52
quelle

4 Antworten

15

Obwohl ich keine Möglichkeit gefunden habe, dies mit der gewünschten Syntax mit enums zu tun, ist dies mit Strukturen möglich.

%Vor%

Zu verwenden:

%Vor%

Apple verwendet in den WatchKit-Vorlagen Strukturen wie diese für Storyboard- und Zeilentyp-IDs.

    
Joey 30.08.2015, 17:59
quelle
6

Sie können hierfür das CustomStringConvertible-Protokoll verwenden.

Aus der Dokumentation

  

String (Instanz) wird für eine Instanz eines beliebigen Typs verwendet und gibt seine zurück   Beschreibung, wenn die Instanz zufällig CustomStringConvertible ist.   Verwenden von CustomStringConvertible als generische Einschränkung oder Zugriff auf a   Die Beschreibung des entsprechenden Typs wird daher nicht empfohlen.

Wenn Sie also diesem Protokoll entsprechen und Ihren rawValue über die Beschreibungsmethode zurückgeben, können Sie String (Table.User) verwenden, um den Wert zu erhalten.

%Vor%     
Sandeep 30.08.2015 17:13
quelle
0

Wenn Sie User als Wörterbuchschlüssel anstelle von String verwenden können ( User ist Hashable standardmäßig), wäre dies eine Lösung.

Wenn nicht, sollten Sie Ihre mit einer verschachtelten Struktur und statischen Variablen / Konstanten verwenden.

    
Qbyte 30.08.2015 22:48
quelle
0

Sie können dies mit einer benutzerdefinierten Klasse tun:

%Vor%

Bearbeiten:
Ich habe eine andere Lösung gefunden, die mit Swift 3 funktioniert:

%Vor%     
Ferenc Kiss 31.10.2016 09:15
quelle

Tags und Links