열거형이란?
연관성이 있는 값을 모아 놓은 것을 말한다.
예시
enum CompassPoint {
case north
case south
case east
case west
}
enum CompassPoint {
case north, south, east, west
}
var direction = CompassPoint.east
direction = .west
위와 같이 연관된 항목들을 선언할 수 있다. 두번째 열거형과 같이 한 줄로 작성해도 된다. 각 항목은 그 자체가 고유값이 된다. 열거형의 항목을 가진 변수를 선언할 수 있고 값 변경도 가능하다.
switch 활용 예시
switch direction {
case .north:
print("north")
case .south:
print("south")
case .east:
print("east")
case .west:
print("west")
}
열거형의 각 항목들은 그 자체로 고유한 값으로 쓸 수 있지만 원시값을 가지게 할 수 있다. 이 말은 특정 타입으로 지정된 값을 가질 수 있다는 말이다.
예시
enum CompassPoint: String {
case north = "북"
case south = "남"
case east = "동"
case west = "서"
}
var direction = CompassPoint.east
direction = .west
switch direction {
case .north:
print(direction.rawValue)
case .south:
print(direction.rawValue)
case .east:
print(direction.rawValue)
case .west:
print(direction.rawValue) // "서" 출력
}
위와 같이 열거형에 타입을 지정해주고 각 항목에 원시값을 할당하면 switch 구문과 같이 rawValue를 통해 원시값을 가져올 수 있다. 반대로 원시값을 이용해 변수를 선언할 수도 있다.
예시
let direction2 = CompassPoint(rawValue: "남") // south
CompassPoint의 매개변수로 rawValue를 넘겨주게되면 해당 원시값을 가진 항목으로 변수를 선언할 수 있다. 열거형은 연관값도 가질 수 있다.
예시
enum PhoneError {
case unknown
case batteryLow(String)
}
let error = PhoneError.batteryLow("배터리가 곧 방전됩니다.")
switch error {
case .batteryLow(let message):
print(message)
case .unknown:
print("알 수 없는 에러입니다.")
}
연관값을 주려면 항목 옆에 소괄호()를 붙여주면 된다. 열거형의 항목이 연관값을 가진다고 모든 항목이 연관값을 가질 필요는 없다. switch를 활용해 연관값을 출력할 수 있다.