iOS/Swift
[Swift] enum(열거형) 기초
겸둥이xz
2021. 5. 17. 11:23
반응형
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
반응형