- swift에 대해 공부한 내용을 정리한 글입니다.
- 해당 글은 한빛미디어의 스위프트 프로그래밍 3판을 참고하여 작성했습니다.
열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다. 열거형은 배열이나 딕셔너리 같은 타입과 다르게 프로그래머가 정의해준 항목 값 외에는 추가/수정이 불가능하다.
열거형은 다음과 같은 경우에 사용할 수 있다.
열거형은 enum
키워드를 사용해 선언한다.
enum CompassPoint {
case east
case west
case south
case north
}
enum CompassPoint {
case east, west, north, south
}
var direction = CompassPoint.east
print(direction)
east
결과 값으로 east가 출력된 이유는, 열거형의 항목은 그 자체가 고유한 '값'이기 때문이다.
direction = .west
print(direction)
west
switch direction {
case .east:
print("east")
case .west:
print("west")
case .south:
print("south")
case .north:
print("north")
}
west
열거형의 각 항목은 자체로도 하나의 값이지만 항목의 원시 값도 가질 수 있다. 즉, 특정 타입으로 지정된 값을 가질 수 있다는 뜻이다.
enum CompassPoint {
case east = "동"
case west = "서"
case south = "남"
case north = "북"
}
이때 스위프트의 열거형은 모든 타입을 원시 값으로 가질 수 있다.
원시 값을 사용할 때는 rawValue
프로퍼티를 사용한다.
var direction = CompassPoint.east
print(direction.rawValue)
동
let direction2 = CompassPoint(rawValue: "남")
print(direction2)
south
열거형 내의 각 항목은 자신과 연관된 값을 가질 수 있다. 연관 값은 항목 옆에 소괄호로 묶어서 표현하고, 다른 항목이 연관 값을 갖는다고 해서 모든 항목이 연관 값을 갖지 않는다.
enum PhoneError {
case unknown
case batteryLow(String)
case overheating(temperature: Double)
}
let error = PhoneError.batteryLow("배터리가 곧 방전됩니다.")
print(error)
batteryLow("배터리가 곧 방전됩니다.")
switch error {
case .batteryLow(let message):
print(message)
case .unknown:
print("알 수 없는 에러입니다.")
case .overheating(temperature: let temperature):
print(temperature)
}
배터리가 곧 방전됩니다.