Das Comparable-Protokoll für Enumeration in Swift


Eine Neuerung, die Swift in Version 5.3 hinzugefügt wurde, ist die Möglichkeit, Enum-Werte zu vergleichen. Dabei ist nicht nur eine Unterscheidung auf Gleichheit möglich, diese Möglichkeit bot Swift schon immer, sondern auch ein hierarchischer Vergleich. Ein Enum-Wert kann größer oder kleiner als ein anderer Wert sein. Möglich wird es, wenn ein Enum das Comparable-Protokoll implementiert. Im Programmcode ist dazu wenig Aufwand nötig. Es genügt, das Protokoll bei der Definition des Enum mit anzugeben. Spezielle Methoden müssen nicht umgesetzt werden. Die »Wertigkeit« entsteht durch die Reihenfolge der Bezeichner im Enum.

enum ElementsComparable {

    case Hydrogen

    case Helium

    case Carbon

    case Oxygen

    case Iron

    case Copper

    case Gold

    case Uranium

    case Plutonium

}


Elements.Helium < Elements.Gold // true

Elements.Oxygen > Elements.Iron // false

Elements.Uranium < Elements.Plutonium // true

Durch die Implementierung des Comparable-Protokolls werden nicht nur die einzelnen Werte vergleichbar, Listen aus Enum-Werten können problemlos mit der sorted-Methode sortiert werden.

let elementsList: [Elements] = [.Uranium, .Helium, .Oxygen, .Iron]

print(elementsList.sorted())

Zur Erinnerung: Die Methode sorted erzeugt eine neue, sortierte Liste. Möchte man eine vorhandene Liste »an Ort und Stelle« oder »in place« sortieren, ist das eine Aufgabe für die Methode sort. Das funktioniert aber nur, wenn der Bezeichner mit var als Variable und nicht mit let als Konstante deklariert wurde.

var elementsList: [Elements] = [.Uranium, .Helium, .Oxygen, .Iron]

elementsList.sort()

print(elementsList)


Geschrieben am: 30.09.2020
Technologien: Swift, SwiftUI, macOS, iOS