* 정의
enumertaion 은 우리말로 열거형이고 항목들을 묶어서 표현할 수 있는 하나의 형식이다.
ex)일주일
enum Weekday {
case sunday
case monday
case tuesday
case wednesday
case thursday
case friday
case saturday
}
Weekday.sunday
점문법으로 항목에 접근하는 것이 가능하다. 하지만 변수나 상수를 생성하여 enum의 타입을 명시해주면 형식추론이 가능해진다
let day: WeekDay = .sunday
열거형은 주로 switch문과 함께 사용한다.
switch day {
case .sunday:
print("일요일")
case .monday:
print("월요일")
case .tuesday:
print("화요일")
default:
break
}
현재 모든 경우의 수를 만족시켜주지 않았기 때문에 default를 사용했으나, 만약 Weekday 타입의 모든 항목을 포함시켰다면 default를 생략할 수 있다.
enum Weekday: String {
case sunday = "일요일"
case monday = "월요일"
case tuesday = "화요일"
case wednesday = "수요일"
case thursday = "목요일"
case friday = "금요일"
case saturday = "토요일"
}
항목에 값을 할당하는 것도 얼마든지 가능하다. 그 값을 RawValue(원시값) 이라고 하며, 주로 Int 타입을 가장 많이 사용한다. 사용 이유는 주로 다른 언어와의 호환성 때문이다.
책에서 열거형 파트를 보면 공통적으로 나오는 단어가 항상 제한된, 정해진, 한정, 같은 것들이다. 자주 언급되는 것을 보니 어쩌면 열거형의 가장 중요한 점은 '고정된 경우의 수' 가 아닐까?...
enum CountZeroToThree: Int {
case zero
case one
case two = 200
case three
}
CountZeroToThree.zero.rawValue
CountZeroToThree.one.rawValue
CountZeroToThree.two.rawValue
CountZeroToThree.three.rawValue
열거형의 모든 항목이 값을 가질 필요는 없다. 항목자체가 고유값이 될 수 있기 때문이다. 그래서 원하는 항목에만 원시 값을 부여하는 것이 가능하다.
원시 값 타입을 Int로 한뒤 값을 할당하지 않으면 1씩 증가하는 오름차순으로 자동배정 된다. 위에 작성되어 있는 코드를 보면 200까지는 1씩 증가하다가, two의 원시값 이후로 다시 1씩 증가하는 것을 볼 수 있다.
CountZeroToThree(rawValue: 100)
원시값을 통해서 열거형 인스턴스를 생성할 수 있다. 존재하지 않는 원시값을 전달하면 nil을 리턴한다.
let someCounting = CountZeroToThree(rawValue: 200)
특정열거형의 특정항목에 특정값에 대한 정보를 내가 알고 있다면 특정값(원시값)을 통해서 열거형 변수나 상수를 생성할수 있다.