Schneller Tipp Enumerationen in Swift

Aufzählungen sind in vielen Programmiersprachen ein verbreitetes Entwurfsmuster. Obwohl Sie mit Aufzählungen in C und Objective-C vertraut sind, ist die Implementierung von Aufzählungen durch Swift wesentlich leistungsfähiger und flexibler. In diesem kurzen Tipp erfahren Sie, was an Aufzählungen in Swift besonders ist, wie Sie sie in Ihren Projekten einsetzen können und was sie so leistungsfähig macht.

1. Was ist eine Aufzählung??

Aufzählungen sind nicht neu und sicherlich nicht einzigartig für Swift. Wenn Sie jedoch mit Aufzählungen in C vertraut sind, werden Sie Swifts mächtige Version von Aufzählungen lieben.

Wenn Aufzählungen oder Aufzählungen für Sie neu sind, sind Sie möglicherweise nicht mit deren Angebot vertraut. In Swift sind Aufzählungen erste Klassentypen, die eine Liste möglicher Werte für diesen Typ definieren.

Ein Beispiel könnten die möglichen Zustände einer Netzwerkverbindung sein. Die möglichen Zustände könnten sein:

  • getrennt
  • verbinden
  • in Verbindung gebracht

Wir könnten einen vierten Zustand hinzufügen, falls der Zustand unbekannt ist. In diesem Beispiel wollen wir sehen, wie eine solche Aufzählung definiert und implementiert wird.

Grundlagen

Wie ich schon sagte, sind Aufzählungen erstklassige Typen in Swift. Eine Aufzählungsdefinition sieht einer Klassen- oder Strukturdefinition sehr ähnlich. Im folgenden Beispiel definieren wir die ConnectionState Aufzählung.

enum ConnectionState 

Dem Namen der Aufzählung wird das vorangestellt enum Stichwort und gefolgt von einem Paar geschweifte Klammern. Das ConnectionState Die Aufzählung definiert die möglichen Zustände einer Netzwerkverbindung. Um diese Zustände zu definieren, fügen wir hinzu Mitgliederwerte oder Mitglieder zur Definition der Aufzählung. Die Definition eines Member-Werts beginnt immer mit dem Fall Stichwort.

enum ConnectionState Fall unbekannter Fall getrennter Fall Verbindungsfall verbunden

In C oder Objective-C würde die obige Aufzählung etwas anders aussehen, wie im folgenden Beispiel dargestellt. Jeder Wert der Aufzählung entspricht beispielsweise einer ganzen Zahl, ConnectionStateUnknown gleich 0, ConnectionStateDisconnected gleich 1, usw.

typedef Aufzählung: NSUInteger ConnectionStateUnknown, ConnectionStateDisconnected, ConnectionStateConnecting, ConnectionStateConnected ConnectionState;

Dies trifft in Swift nicht zu. Die Mitglieder einer Aufzählung entsprechen nicht automatisch einem ganzzahligen Wert. Die Mitglieder der ConnectionState Aufzählung sind Werte selbst und sie sind vom Typ ConnectionState. Dies macht die Arbeit mit Aufzählungen sicherer und expliziter.

Rohwerte

Es ist möglich, die Werte der Mitglieder einer Aufzählung explizit anzugeben. Im folgenden Beispiel zeigen die Mitglieder des ConnectionState Aufzählung hat einen Rohwert vom Typ Int. Jedem Member wird ein Rohwert zugewiesen, der einer ganzen Zahl entspricht.

enum ConnectionState: Int case Unknown = -1 case Disconnected = 0 case Connecting = 1 case Verbunden = 2

Beachten Sie, dass wir den Typ der Rohwerte in der Definition der Aufzählung angeben und dass keine zwei Elementwerte denselben Rohwert haben dürfen. Wenn wir nur einen Wert für angeben unbekannte Mitglied, dann erhöht Swift automatisch den Wert von unbekannte member und weisen Sie den anderen Mitgliedern der Aufzählung eindeutige Werte zu. Zur besseren Veranschaulichung ist das folgende Beispiel identisch mit der vorherigen Definition des ConnectionState Aufzählung.

enum ConnectionState: Int case Unknown = -1 case Disconnected case Verbindungsfall verbunden

2. Arbeiten mit Aufzählungen

Initialisierung

Verwendung der ConnectionState Die Aufzählung ähnelt der Verwendung anderer Typen in Swift. Im nächsten Beispiel deklarieren wir eine Variable, connectionState, und setze seinen Wert auf ConnectionState.Connecting.

var connectionState = ConnectionState.Connecting

Der Wert von connectionState ist ConnectionState.Connecting und die Variable ist vom Typ ConnectionState.

Die Typinferenz von Swift ist sehr praktisch, wenn Sie mit Aufzählungen arbeiten. Weil wir erklärt haben connectionState als vom Typ sein ConnectionState, Wir können jetzt einen neuen Wert zuweisen, indem Sie die Kurzschreibungspunktsyntax für Aufzählungen verwenden.

connectionState = .Connected

Kontrollfluss

Verwenden von Aufzählungen in einem ob oder Schalter Aussage ist unkompliziert. Erinnere dich daran Schalter Aussagen müssen erschöpfend sein. Füge hinzu ein Standard falls erforderlich.

enum ConnectionState case Unbekannter Fall Getrennter Fall Verbindungsfall Connected var connectionState = ConnectionState.Connecting connectionState = .Connected Switch ConnectionState Fall. Disconnected: println ("Disconnected") case .Connecting: println ("Connecting") case .Connected: println ("Verbunden") Standard: println ("Unknown State")

Das folgende Beispiel zeigt, wie das ConnectionState enum kann verwendet werden. Außerdem wird gezeigt, wie auf den zugehörigen Wert eines Enumerationsmitglieds zugegriffen werden kann. Das canConnect Funktion akzeptiert a ConnectionState Instanz und gibt ein Bool.

func canConnect (connectionState: ConnectionState) -> Bool var result = false switch Verbindungsstatus case .Connected (let port): wenn port == 3000 result = true default: result = false return result let state = ConnectionState. Verbunden (3000) if canConnect (state) //…

Das canConnect Funktion gibt nur zurück wahr wenn die ConnectionState Die an die Funktion übergebene Instanz ist gleich .In Verbindung gebracht und der zugehörige Wert ist ein Int gleich 3000. Beachten Sie, dass der zugehörige Wert von In Verbindung gebracht Mitglied ist in der Schalter Anweisung als eine Konstante namens Hafen, das können wir dann im entsprechenden verwenden Fall.

3. Zugehörige Werte

Ein weiteres überzeugendes Merkmal von Swift Enums sind zugehörige Werte. Jedes Mitglied einer Aufzählung kann einen zugehörigen Wert haben. Zugehörige Werte sind sehr flexibel. Beispielsweise müssen zugeordnete Werte verschiedener Mitglieder derselben Enumeration nicht vom selben Typ sein. Sehen Sie sich das folgende Beispiel an, um das Konzept der zugehörigen Werte besser zu verstehen.

enum ConnectionState case Unbekannter Fall Getrennter Fall Connecting (Int, Double) Case Verbunden (Int)

Das unbekannte und Getrennt Mitglieder haben keinen zugehörigen Wert. DasAnschließen Mitglied hat einen zugehörigen Wert des Typs (Int, Double), Angeben der Portnummer und des Timeout-Intervalls der Verbindung. Das In Verbindung gebracht Mitglied hat einen zugehörigen Wert des Typs Int, Angabe der Portnummer.

Es ist wichtig zu verstehen, dass ein zugeordneter Wert mit einem Enumeration-Mitglied verknüpft oder diesem zugeordnet ist. Der Wert des Mitglieds bleibt unverändert. Das nächste Beispiel zeigt, wie ein erstellt wird ConnectionState Instanz mit einem zugehörigen Wert.

var connectionState = ConnectionState.Connecting (3000, 30.0)

4. Methoden und Werttypen

Methoden

Aufzählungen sind in Swift ziemlich mächtig. Aufzählungen können sogar Methoden definieren, z. B. einen Initialisierer, um einen Standardelementwert auszuwählen, wenn keiner angegeben wurde.

enum ConnectionState case Unbekannter Fall Getrennter Fall Connecting (Int, Double) Case verbunden (Int) init () self = .Unknown var connectionState = ConnectionState () // .Unknown

In diesem Beispiel initialisieren wir eine Instanz von ConnectionState Aufzählung, ohne explizit einen Wert dafür anzugeben. Im Initialisierer der Aufzählung setzen wir jedoch die Instanz auf unbekannte. Das Ergebnis ist, dass die connectionState Variable ist gleich ConnectionState.Unknown.

Werttypen

Enumerationen sind wie Strukturen Werttypen. Das bedeutet, dass eine Enumeration nicht wie Klasseninstanzen als Referenz, sondern als Wert übergeben wird. Das folgende Beispiel veranschaulicht dies.

var connectionState1 = ConnectionState () var connectionState2 = connectionState1 connectionState1 = .Connected (1000) println (connectionState1) // .Connected (1000) println (connectionState2) // .Unbekannt

Obwohl wir vergeben connectionState1 zu connectionState2, die Werte von connectionState1 und connectionState2 sind am Ende des Beispiels unterschiedlich.

Wann connectionState1 ist zugeordnet connectionState2, Swift erstellt eine Kopie von connectionState1 und ordnet das zu connectionState2. Mit anderen Worten, connectionState1 und connectionState2 verweisen auf zwei verschiedene ConnectionState Instanzen.

Fazit

Enumerationen in Swift sind im Vergleich zu Enumerationen in C unglaublich mächtig. Einer der mächtigsten Aspekte von Enumerationen ist, dass es sich um erstklassige Typen in Swift handelt. Die Textsicherheit ist ein Schlüsselaspekt der Swift-Sprache, und Aufzählungen passen perfekt in diese Denkweise.