💡 열거형 특징
- 조건사항이 한정된 경우 자주 사용
- 처음 정의한 항목 이외에 추가/수정 불가
선언은 'enum'으로 선언하고 'case'를 통해 고유의 값을 생성합니다.
enum WeekDays { //대문자로 시작해야 함
case mon
case tue
case wed
case thu
case fri
case sat
case sun
//위의 선언 방식과 동일함
//case mon, tue, wed, thu, fri, sat, sun
}
(원시값을 부여할때 모든 항목에 원시값을 꼭 부여할 필요는 없습니다.) => 몇가지만 지정 가능
enum WeekDays: String { // 열겨형명: 원시값타입
case mon = "월" // 고유값 : mon, 원시값 : "월"
case tue = "화"
case wed = "수"
case thu = "목"
case fri = "금"
case sat = "토"
case sun = "일"
//위의 선언 방식과 동일함
//case mon = "월", tue = "화", wed = "수", thu = "목", fri = "금", sat = "토", sun = "일"
}
var today: WeekDays = Weekdays.mon
print("오늘 요일 : \(today.rawValue)") //열거형 뒤에 .rawValue를 통해 해당 원시값을 가져옴
// 출력 결과 => 오늘 요일 : 월
추가로 원시값 타입을 지정하고 원시값을 입력하지 않은 경우에는 원시값이 자동으로 저장됩니다.
아래와 같이 원시값 타입이 Int인 경우 위부터 순서대로 0, 1, 2, ... 이 원시값으로 부여되고, String인 경우에는 case에서 정의한 명칭 그대로 원시값을 가지게 됩니다.
enum WeekDays: 원시값타입 {
//Int인 경우 String인 경우
case mon //0 "mon"
case tue //1 "tue"
case wed //2 "wed"
case thu //3 "thu"
case fri //4 "fri"
case sat //5 "sat"
case sun //6 "sun"
}
enum Order {
//각 항목에 연관된 값 ()내부에 추가로 표현
case drink(menu: String, state: Int) // state >> 0: hot, 1:ice
case cake(menu: String)
case bread(menu: String) // 속성명 없이도 사용 가능 => case bread(String)
}
//열거형을 사용하여 새로 생성할 때마다 값 부여 >> 자료형 제한 없음
var order1 = Order.drink(menu: "cafeLatte", state : 0)
var order2 = Order.cake(menu: "cheesecake")
만약 해당 속성값도 한정적일 경우 열거형을 속성값으로 선언하여 표현할 수 있습니다.
위의 코드에서 메뉴가 한정적으로 정해져 있는 경우 아래와 같이 열거형을 속성값으로 부여해 사용 가능합니다.
enum DrinkMenu{
case american, cafeLatte, cafeMocha, cappuccino
}
enum DrinkState{
case hot, ice
}
enum CakeMenu{
case cheesecake, chocolatecake, strawberrycake
}
enum CakeMenu{
case croissant, bagel
}
enum Order {
//각 항목에 연관된 값 ()내부에 추가로 표현
case drink(menu: DrinkMenu, state: DrinkState)
case cake(menu: CakeMenu)
case bread(menu: BreadMenu)
}
🚨 단!! 원시값과 연관값은 동시 사용이불가능합니다!!