열거형은 각각의 case가 고유의 값으로 취급이 된다.
enum은 대문자 카멜케이스로, 각 case는 소문자 카멜케이스로 정의한다.
enum Weekday {
case mon
case tue
case wed
case thu, fri, sat, sun
}
열거형의 케이스를 나타내는 문법은 아래와 같다.
var day: Weekday = Weekday.mon // var day = Weekday.mon 으로 축약 가능
day = .tue // 축약형
열거형은 switch 구문과 자주 사용된다.
switch day {
case .mon, .tue, .wed, .thu:
print("평일입니다")
case Weekday.fri:
print("불금!!!")
case .sat, .sun:
print("주말!!!")
}
모든 케이스를 적어준다면 default를 작성해 줄 필요가 없다.
C 언어처럼 정수값을 가지도록 만들고 싶다면 원시값(rawValue)을 쓰면 된다.
enum Fruit: Int {
case apple = 0
case grape = 1
case peach // 자동으로 2가 들어간다.
// case mango = 0 -> X. mango와 apple의 원시값이 같으므로
// mango 케이스의 원시값을 0으로 정의할 수 없음
}
rawValue를 꺼내서 쓸 때는 다음과 같이 해주면 된다.
print("Fruit.peach.rawValue == \(Fruit.peach.rawValue)")
정수 타입 뿐만 아니라 Hashable 프로토콜을 따르는 모든 타입(ex. String)이 원시값의 타입으로 지정될 수 있다.
enum School: String {
case elementary = "초등"
case middle = "중등"
case high = "고등"
case university
}
print("School.middle.rawValue == \(School.middle.rawValue)")
// School.middle.rawValue == 중등
print("School.university.rawValue == \(School.university.rawValue)")
// School.middle.rawValue == university
그리고 원시값을 통해 case를 초기화할 수 있다.
rawValue가 없는 경우가 있으므로 아래와 같이 옵셔널 타입으로 반환한다.
let apple: Fruit? = Fruit(rawValue: 0)
//let apple: Fruit = Fruit(rawValue: 0) 이라고 하재무녀 안됨
스위프트의 열거형에 메서드를 추가할 수 있다.
야곰의 스위프트 기초문법 강좌