일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- PHP
- C
- level13
- System
- Stack
- 파이썬
- Java
- 정렬 알고리즘
- 스택
- ftz
- 미로 탐색 알고리즘
- 시간복잡도
- c언어
- 재귀
- windosws wbcs
- 두근두근 자료구조
- OSI
- pwnable.kr
- web
- LoB
- windosw 문자열
- ftz level13
- HTML
- SWiFT
- 백준
- 자료구조
- War Game
- 큐
- 암호수학
- 파일 시스템
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 4.5.3 연관 값 / 4.5.4 항목 순회 본문
반응형
스위프트 프로그래밍 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(taste: "크림")
dinner = .pizza(dough: "치즈크러스트", topping: "불고기")
dinner = .chicken(withSauce: true)
dinner = .rice
각 케이스 별(파스타, 피자 치킨)로 파스타의 맛이나 피자의 도우, 토핑 또는 치킨의 소스가 한정되어 있다면 열거형으로 작성하여 제한을 둘 수 있습니다.
enum PastaTaste{
case cream, tomato
}
enum PizzaDough{
case cheeseCurst, thin, original
}
enum PizzaTopping{
case pepperoni, cheese, bacon
}
enum MainDish{
case pasta(taste: PastaTaste)
case Pizza(dough: PizzaDough, topping: PizzaTopping)
case chicken(withSauce: bool)
}
var dinner: MainDish = MainDish.pasta(taste: PastaTaste.tomato)
dinner = .pizza(dough: PizzaDough.cheeseCurst, topping: PizzaTopping.bacon)
4.5.4 항목 순회
때때로 열거형에 포함된 모든 케이스를 알아야 할 때가 있다. 열거형의 이름 뒤에 콜론을 작성하고 한 칸 띄운 뒤 CaseIterable 프로토콜을 채택한다. 그러면 열거형에 allCases라는 이름의 타입 프로퍼티를 통해 모든 케이스의 컬렉션을 생성해줍니다.
enum School: CaseIterable{
case primary //유치원
case elementary //초등
case middle //중등
case high //고등
case college //대학
case university //대학교
case graduate //대학원
}
let allCases: [School] = School.allCases
print(allCases)
만약 원시값을 갖는 열거형이라면 원시 값의 타입 다음 쉼표를 쓰고 CaseIterable 프로토콜을 채택하면 된다.
enum School: String, CaseIterable{
case primary="유치원"
case elementary = "초등학교"
case middle = "중등학교"
case high = "고등학교"
case college = "대학"
case university = "대학교"
case graduate = "대학원"
}
let allCases: [School] = School.allCases
print(allCases)
결과는 동일하다.
반응형
'Programming > Swift' 카테고리의 다른 글
[Swift] 6.1.2 switch 구문 (0) | 2021.07.05 |
---|---|
[Swift] 4.5.5 순환 열거형 (0) | 2021.07.02 |
[Swift] 4.5 열거형 / 원시 값 (0) | 2021.07.01 |
[Swift] 1.2.2 함수형 / 함수형 프로그래밍 패러다임 (0) | 2021.07.01 |
[Swift] 1.2.1 객체지향 / 객체지향 프로그래밍 패러다임 (0) | 2021.06.29 |