열거형은 관련된 값의 그룹을 위한 일반 타입을 정의하고 코드에서 타입-세이프 방법으로 값을 동작하게 도와준다. 열거형은 각 케이스에 값을 제공하지 않아도 상관이 없다. 이는 그 자체로 1급 타입이다. 열거형의 현재값에 대한 추가 정보를 제공하는 계산된 프로퍼티 등 클래서에스 지원되는 많은 기능을 채택할 수 있다. 케이스 초기값을 설정하기 위해 초기화를 정의할 수도 있으며, 프로토콜 준수도 가능하다.
enum SomeEnumerations {
// 열거형 정의
}
enum CompassPoint {
case north
case east
case south
case west
}
//열거형 안에 정의된 값들은 열거형 케이스이다.
//이 때 case라는 키워드를 통해서 케이스를 정의해준다.
enum CompassPoint {
case north, east, south, west
}
//열거형 케이스는 다음과 같이 한줄로 명시가 가능하다.
var directionToHead = CompassPoint.west
//다음과 같이 앞에 붙는 이름이 그 타입 자체가 된다.
var directionToHead = .west
//다음과 같이 선언하는 경우 그 열거형이 자동으로 타입 유추된다.
//var directionToHead : CompassPoint = .west 다음과 동일하다.
directionToHead = .south
switch directionToHead {
case .north:
print("north")
case .south:
print("north")
case .east:
print("north")
case .west:
print("north")
//다음과 같이 스위치 구믄을 통해서 열거형 값에 따른 동작을 정의가능하다.
let somePlanet = Planet.earth
switch somePlanet {
case .earth:
print("earth!")
default:
print("Not a safe place for humans")
}
//다음과 같이 예외케이스를 하나로 묶어서 처리 가능하다.
enum Beverage : CaseIterable {
case coffee, tea, juice
}
let numberOfChoice = Beverage.allCases.count
//3을 가지게 된다. count프로퍼티를 통해서 배열의 케이스 갯수에 접근 가능하다.
for value in Beverage.allCases {
print(value)
}
//순차적으로 커피 차 쥬스를 출력한다.