Swift 데이터 타입 (3) 열거형
Swift 데이터 타입 (3) 열거형
열거형
연관된 항목들을 묶어서 표현함 프로그래머가 정의해준 항목 이외는 추가,제거가 불가능하다
열거형 사용 용도
- 제한된 선택지
- 정해진 값 이외는 받지 않을때
- 입력값이 한정 되어 있을때
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//열거형 선언
enum School {
case primary
case elementary
case middle
case high
case unversity
}
enum School {
case primary, elementary, middle, high, university
}
//두 표현은 같다
//열거형 변수 or 상수 선언
var highestLevel : School = School.high //변수에 항목 넣음
highestLevel = .university // 변수 값 변경
원시값
열거형의 항목 case 자체로도 하나의 값이지만 원시값 RawVlaue 를 가질 수 있다
rawValue 프로퍼티로 원시값을 가져 올 수 있다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
enum School : String {
case primary = "유치원"
case elementary = "초등학교"
case middle = "중학교"
case high = "고등학교"
case university
}
print("저의 최종학력은 \(School.high)입니다 ") //저의 최종학력은 high입니다
print("저의 최종학력은 \(School.high.rawValue)입니다 ") //저의 최종학력은 고등학교입니다
print("저의 최종학력은 \(School.university.rawValue)입니다 ") //저의 최종학력은 university입니다
//원시값이 없으면 항목 이름 그대로 원시값을 갖는다
정수형 원시값을 가지는 경우
1
2
3
4
5
6
7
8
9
10
11
12
enum number : Int {
case one = 5
case two
case three = 1
case four = 2
case five
}
print("\(number.two.rawValue)") //6
print("\(number.five.rawValue)") //3
//정수형 원시값에서 중간에 원시값이 없으면 이전 정수에서 +1을 한 값을 넣는다
자동으로 생성된 원시값이 다른 원시값과 같으면 Raw value for enum case is not unique 오류가 뜬다
만약 처음이 비어있으면 0부터 시작한다
원시값을 통해서 열거형 변수 or 상수를 선언 할 수 있다
1
2
3
var 초등학교 = School(rawValue: "초등학교")
var one = number(rawValue: 5)
연관값
연관값은 각 항목 옆에 소괄호로 묶어서 표현한다
1
2
3
4
5
6
7
8
9
enum Food {
case pizza(dough: String, topping: String)
case pasta(taste: String)
case chicken(withSauce: Bool)
case rice
}
var dinner: Food = Food.pizza(dough: "thin", topping: "cheese")
dinner = .chicken(withSauce: true)
열거형안에 열거형 연관값 이용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
enum PizzaDough {
case original, thin
}
enum PizzaTopping {
case cheese, bacon
}
enum PastaTaste {
case cream, tomato
}
enum Food {
case pizza(dough: PizzaDough, topping: PizzaTopping)
case pasta(taste: PastaTaste)
case chicken(withSauce: Bool)
case rice
}
var dinner: Food = Food.pizza(dough: PizzaDough.original , topping: PizzaTopping.cheese)
dinner = .pasta(taste: PastaTaste.cream)
This post is licensed under CC BY 4.0 by the author.