[스위프트]

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