Tutorial by Examples



An enum provides a set of related values: enum Direction { case up case down case left case right } enum Direction { case up, down, left, right } Enum values can be used by their fully-qualified name, but you can omit the type name when it can be inferred: let dir = Dire...
Enum cases can contain one or more payloads (associated values): enum Action { case jump case kick case move(distance: Float) // The "move" case has an associated distance } The payload must be provided when instantiating the enum value: performAction(.jump) performA...
Normally, enums can't be recursive (because they would require infinite storage): enum Tree<T> { case leaf(T) case branch(Tree<T>, Tree<T>) // error: recursive enum 'Tree<T>' is not marked 'indirect' } The indirect keyword makes the enum store its payload with...
Enums without payloads can have raw values of any literal type: enum Rotation: Int { case up = 0 case left = 90 case upsideDown = 180 case right = 270 } Enums without any specific type do not expose the rawValue property enum Rotation { case up case right cas...
Enums can have custom init methods that can be more useful than the default init?(rawValue:). Enums can also store values as well. This can be useful for storing the values they where initialized with and retrieving that value later. enum CompassDirection { case north(Int) case south(Int)...
Enums in Swift are much more powerful than some of their counterparts in other languages, such as C. They share many features with classes and structs, such as defining initialisers, computed properties, instance methods, protocol conformances and extensions. protocol ChangesDirection { mutati...
You can nest enumerations one inside an other, this allows you to structure hierarchical enums to be more organized and clear. enum Orchestra { enum Strings { case violin case viola case cello case doubleBasse } enum Keyboards { case...

Page 1 of 1