반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 도커 이미지
- k8s
- AWS
- os
- Swift
- ios
- 도커 컨테이너
- centOS7
- 쿠버네티스
- kubernetes
- NGINX
- 도커
- 부스트코스
- 도커 명령어
- 리눅스
- boj
- centOS
- C++
- swift 클로저
- 운영체제
- 네트워크
- linux
- 클라우드
- devops
- Python
- 컨테이너
- 인프라
- docker
- 데브옵스
- 프로세스
Archives
- Today
- Total
귀염둥이의 메모
[Swift] enum(열거형) 기초 본문
반응형
enum(열거형)
- 유사한 종류의 여러 값을 한 곳에 모아서 정의한 것입니다.
- enum 자체가 하나의 데이터 타입입니다. (카멜케이스를 사용하여 이름을 정의)
- 각 case는 그 자체가 고유의 값입니다. (각 case에 자동으로 정수값이 할당되지 않음)
enum 이름 {
case 이름1
case 이름2
case 이름3, 이름4, 이름5 // 한 줄에 여러개 정의 가능
}
enum Weekday {
case mon
case tue
case wed
case thu, fri, sat, sun
}
enum 사용
- 타입이 명확할 경우, 열거형의 이름을 생략할 수 있습니다.
- switch 구문에서 사용하면 좋습니다.
enum Weekday {
case mon
case tue
case wed
case thu, fri, sat, sun
}
// 열거형 타입과 케이스를 모두 사용가능
var day: Weekday = Weekday.mon
// 타입이 명확하다면 .케이스 처럼 표현가능
day = .tue
print(day) // tue
// switch의 비교값에 열거형 타입이 위치할 때
// 모든 열거형 케이스를 포함한다면
// default를 작성할 필요 없음
switch day {
case .mon, .tue, .wed, .thu:
print("평일")
case Weekday.fri:
print("불금!")
case .sat, .sun:
print("주말!!")
}
rawValue(원시값)
- C언어의 enum처럼 정수값을 가질 수 있습니다.
- rawValue는 case별로 각각 다른 값을 가져야합니다.
- 자동으로 1이 증가된 값이 할당됩니다.
- 정수 타입 뿐만 아니라, Hashable 프로토콜을 따르는 모든 타입을 원시값의 타입으로 지정 가능합니다.
enum Fruit: Int {
case apple = 0
case grape = 1
case peach
}
print(Fruit.peach.rawValue) // 2
enum School: String {
case elementary = "초등"
case middle = "중등"
case high = "고등"
case university
}
print(School.middle.rawValue) // 중등
// 열거형의 원시값 타입이 String일 때, 원시값이 지정되지 않았다면
// case의 이름을 원시값으로 사용합니다
print(School.university.rawValue) // university
원시값을 통한 초기화
- rawValue를 통해 초기화 할 수 있습니다.
- rawValue를 통해 초기화 한 인스턴스는 Optional 타입입니다. (rawValue가 case에 해당하지 않을 수 있기때문)
enum School: String {
case elementary = "초등"
case middle = "중등"
case high = "고등"
case university
}
let a: School? = School(rawValue: "대학생")
if let _ = a {
print("nil 아님")
} else {
print("nil")
}
// nil
메서드
- 열거형에는 메서드를 추가할 수 있습니다.
enum Month {
case dec, jan, feb
case mar, apr, may
case jun, jul, aug
case sep, oct, nov
func printMessage() {
switch self {
case .mar, .apr, .may:
print("봄")
case .jun, .jul, .aug:
print("여름")
case .sep, .oct, .nov:
print("가을")
case .dec, .jan, .feb:
print("겨울")
}
}
}
Month.mar.printMessage() // 봄
<참고자료>
https://www.boostcourse.org/mo122/lecture/11273?isDesc=false
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] 자동 참조 카운트 정리 ARC (Automatic Reference Counting) (0) | 2021.06.27 |
---|---|
[Swift] 클로저 (2) - Capturing Values, Escaping Closure, Auto Closure (0) | 2021.06.21 |
[Swift] 클로저(Closure) (1) (0) | 2021.04.13 |
[Swift] 타입 캐스팅(Type Casting), 업 캐스팅(Up Casting), 다운 캐스팅(Down Casting) (0) | 2021.04.09 |
[Swift] 구조체(struct) vs 클래스(class) (1) | 2021.02.19 |
Comments