스위프트의 원시값, 연관값
2022/12/13(화요일)
[스위프트]
4.5.2 원시 값
열거형의 각 항목은 자체로도 하나의 값이지만 항목의 원시 값도 가질 수 있다. 즉, 특정 타입으로 지정된 값을 가질 수 있다는 뜻이다. 특정 타입의 값을 원시 값으로 가지고 싶다면 열거형 이름 오른쪽에 타입을 명시해주면 된다. 또, 원시 값을 사용하고 싶다면 rawValue라는 프로퍼티를 통해 가져올 수 있다.
enum School: String{
case primary = "유치원"
case elemenatary = "초등학교"
case middle = "중학교"
case high = "고등학교"
case college = "대학"
case university = "대학교"
case graduate = "대학원"
}
let highestEducationLevel: School = School.university
enum WeekDays: Character{
case mon = "월", tue = "화" ...
}
let today: WeekDays = WeekDays.fri
만약 일부 항목만 원시 값을 주고 싶다면 그렇게 해도 된다. 나머지는 스위프트가 알아서 처리해준다. 문자열 형식의 원시 값을 지정해줬다면 각 항목 이름을 그대로 원시 값으로 갖게 되고, 정수 타입이라면 첫 항목을 기준으로 0부터 1씩 늘어난 값을 갖게 된다.
(열거형의 원시 값 일부 지정 및 자동 처리)
enum School: String{
case primary = "유치원"
case elemenatary = "초등학교"
case middle = "중학교"
case high = "고등학교"
case college
case university
case graduate
}
let highestEducationLevel: School = School.university
enum Numbers: Int{
case zero
case one
case two
case ten = 10
}
//0, 1 ...
print("\(Numbers.zero.rawValue), \(Numbers.one.rawValue) ...")
4.5.3 연관 값
스위프트의 열거형 각 항목이 연관 값을 가지게 되면, 기존 프로그래밍 언어의 공용체 형태를 띌 수도 있다. 열거형 내 항목(case)이 자신과 연간된 값을 가질 수 있다. 연관 값은 각 항목 옆에 소괄호로 묶어 표현할 수 있다. 다른 항목이 연관 값을 갖는다고 모든 항목이 연관 값을 가질 필요는 없다.
enum MainDish{
case pasta(taste: String)
case pizza(dough: String, topping: String)
case chicken(withSauce: Bool)
case rice
}
var dinner: MainDish = MainDish.pasta(tase: "크림")
dinner = .pizza(dough: "치즈 크러스트", topping: "불고기")
dinner = .chicken(withSauce: true)
dinner = .rice