enum
키워드를 사용해 열거형을 정의합니다.CompassPoint
열거형 선언의 (예)입니다.C나 Objective-C 와는 다르게 Swift에서 열거형은 생성될 때 각 case 별로 기본 integer값을 할당하지 않습니다. 위CompassPoint
를 예로 들면, north, south, east, west는 각각 암시적으로 0, 1, 2, 3값을 갖지 않습니다. 대신 Swift에서 열거형의 각 case는 CompassPoint으로 선언된 온전한 값입니다.
directionToHead
의 형은 초기화 될 때 타입추론이 돼서 CompassPoint
형을 갖게 됩니다. directionToHead
의 형이 CompassPoint
로 한번 정의되면 다음에 값을 할당할 때 형을 생략한 점 문법(dot syntax)을 이용해 값을 할당하는 축약형 문법을 사용할 수 있습니다.Switch
문에서 매칭할 수 있습니다.switch
문은 반드시 열거형의 모든 경우(cases)를 완전히 포함해야 합니다. 만약 위에서 case .west
가 생략되었다면 코드는 컴파일 되지 않습니다. 만약 열거형의 모든 cases의 처리를 기술하는게 적당하지 않다면 기본(default) case를 제공함으로써 처리되지 않는 case를 피할 수 있습니다.switch case
문에서 사용할 때 상수 혹은 변수로 선언할 수 있습니다.let
을 앞으로 빼내 간결하게 기술한 코드)Character
형의 raw값으로 정의했지만, String
, Character
, Integer
,Float
등의 형을 사용할 수도 있습니다. 단, 각 raw값은 열거형 선언에서 유일한 값으로 중복되어서는 안됩니다.Raw값은 관계 값(associated value)과는 다릅니다. Raw값은 코드에서 열거형을 처음 선언할 때 정의되서 특정 열거형의 raw값은 항상 같은 값을 갖습니다. 하지만 관계 값은 같은 case라도 생성될 때 달라질 수 있습니다.
String
을 raw값으로 사용한다면 case텍스트가 raw값으로 자동으로 raw값으로 할당됩니다.CompassPoint.south
는 암시적으로 "south"
를 raw값으로 갖습니다.rawValue
프로퍼티를 사용해 접근할 수 있습니다.raw 값 초기자는 모든 raw값에 대해 열거형 case를 반환이 보장되지 않으므로 실패할 수 있는 초기자(failable initializer)입니다.
nil
이 됩니다.indirect
키워드를 붙여 표시합니다.indirect
표시를 하고 싶으면 enum
키워드 앞에 indirect
표시를 하면 됩니다.