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 Elements: Comparable {
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