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:
Beachten Sie, dass ich Swift 2 verwende. Wenn es einen noch besseren Weg dafür gibt, würde ich es gerne hören!
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%Sie können dies mit einer benutzerdefinierten Klasse tun:
%Vor% Bearbeiten:
Ich habe eine andere Lösung gefunden, die mit Swift 3 funktioniert: