열거라는 뜻을 가진 Enumeration에서 따온 용어

1월부터 12월까지를 enum으로 한 번 정의한다면,

enum Month: Int {
  case january = 1
  case february
  case march
  case april
  case may
  case june
  case july
  case august
  case september
  case october
  case november
  case december

  func simpleDescription() -> String {
    switch self {
    case .january:
      return "1월"
    case .february:
      return "2월"
    case .march:
      return "3월"
    case .april:
      return "4월"
    case .may:
      return "5월"
    case .june:
      return "6월"
    case .july:
      return "7월"
    case .august:
      return "8월"
    case .september:
      return "9월"
    case .october:
      return "10월"
    case .november:
      return "11월"
    case .december:
      return "12월"
    }
  }
}

let december = Month.december
print(december.simpleDescription()) // 12월
print(december.rawValue)            // 12

반대로, 원시값을 가지고 Enum을 만들 수도 있음

let october = Month(rawValue: 10)
print(october) // Optional(Month.october)

Month(rawValue:)반환값이 옵셔널인 이유:

Enum에서 정의되지 않은 원시값을 가지고 생성할 경우 nil을 반환하기 때문

Month(rawValue: 13) // nil

일반적으로 Enum은 Int만을 원시값으로 가질 수 있다고 생각합니다. 다른 프로그래밍 언어에서는 모두 그렇거든요. 하지만, Swift의 Enum은 조금 독특합니다. (독특한게 좀 많죠?) 아래 예시는 String을 원시값으로 가지는 Enum입니다.

일반적으로 Enum은 Int만을 원시값으로 가질 수 있지만 Swift에서는 다름

아래는 String을 원시값으로 가지는 Enum

enum IssueState: String {
  case open = "open"
  case closed = "closed"
}