Advanced Pattern Matching

Enumeration Case Pattern

Enumeration Case Pattern

As you saw in our trading example, pattern matching works really great with Swift's enums. That's because enum cases are like sealed, immutable, destructable structs. Much like with tuples, you can unwrap the contents of an individual case right in the match and only extract the information you need.

Imagine you're writing a game in a functional style and you have a couple of entities that you need to define. You could use structs but as your entities will have very little state, you feel that that's a bit of an overkill.

enum Entities {
    case soldier(x: Int, y: Int)
    case tank(x: Int, y: Int)
    case player(x: Int, y: Int)
}

Now you need to implement the drawing loop. Here, we only need the X and Y position:

for e in entities() {
    switch e {
    case let .soldier(x, y):
      drawImage("soldier.png", x, y)
    case let .tank(x, y):
      drawImage("tank.png", x, y)
    case let .player(x, y):
      drawImage("player.png", x, y)
    }
}

This is the gist of it. The enumeration case pattern is really just using enum cases in the switch statement.