Post

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.