enum
은 하나의 데이터 타입
이므로 대문자 카멜케이스를 사용하여 이름을 정의한다.case
는 소문자 카멜케이스로 정의한다.case
는 그 자체가 고유의 값이다.enum Weekday{
case mon
case tue
case wed
case thu, fri, sat, sun
}
var day = Weekday.mon // var day : Weekday = Weekday.mon와 동일
day = .tue
print(day)
switch day{
case .mon, .tue, .wed, .thu:
print("평일입니다.")
case .fry:
print("불금입니다.")
case .sat, .sun;
print("주말입니다.")
}
C언어
의 enum
처럼 정수값을 가질 수 있다.rawValue
를 사용하면되며, case
별로 각각 다른 값을 가져야된다.enum Fruit : Int{
case apple = 0
case grape = 1
case peach // 자동으로 2가 할당됨
}
print("\(Fruit.peach.rawValue)") // 2가 출력됨
Hashable
프로토콜을 따르는 모든 타입이 원시값의 타입으로 지정될 수 있다.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.university.rawValue == University
rawValue
를 통해 초기화 할 수 있다.rawValue
가 case
에 해당하지 않을 수 있으므로 rawValue
를 통해 초기화한 인스턴스는 옵셔널
타입이다.옵셔널 바인딩
을 통해 접근할 수 있다.let apple : Fruit = Fruit(rawValue: 0) // 컴파일 에러 발생 Fruit(rawValue : 0)이 옵셔널 타입이므로..
let apple : Fruit? = Fruit(rawValue: 0) // 정상 작동
if let orange = Fruit(rawValue: 5){
print("rawValue 5에 해당하는 케이스는 \(orange)입니다.")
} else{
print("rawValue 5에 해당하는 케이스는 없습니다.")
}
enum Month{
case dec,jan,feb
case mar, apr, may
case jun, jul, aug
case sep, oct, nov
func printMessage() {
switch self {
case .mar, .arp, .may:
print("따스한 봄")
case .jun, .jul, .aug:
print("여름 더워요~")
case .sep, .oct, .nov:
print("가을은 독서의 계절')
case .dec, .jan, .feb:
print("추운 겨울입니다.")
}
}
}
Month.jun.printMessage()
enum MainDish{
case pasta(taste: String)
case pizza(dough: String, topping: String)
case chicken(withSauce: Bool)
case rice
}
var dinner: MainDish = MainDish.pasta(taste: "크림")
dinner = .pizza(dough: "치즈 크러스트")
dinner = .chicken(withSauce: true)
dinner = .rice
열거형 내의 각 항목(case
)는 자신과 관련된 값을 가질 수 있으며, 각 항목에 따라 값을 가질수도, 갖지 않을 수도 있다.
enum School: CaseIterable{
case elementarySchool
case middleSchool
case highSchool
case collage
case university
}
let array = [School] = School.allCases
print(array) // [School.elementary, School.middleSchool, Schoo.highScool......]
CaseIterable
프로토콜을 채택하여 열거형의 각 케이스들의 배열을 받을 수 있다.