https://youtu.be/R8OWOgCNt4M?si=bldau6gYEZ3seGj2
위 영상을 보고 정리한 글입니다. (34:04 ~ 35:40)
# 열거형(enum)
관련있는 데이터들이 멤버로 구성되어 있는 자료형
- 원치 않는 값이 잘못 입력되는 것 방지
- 입력 받을 값이 한정되어 있을 때
- 특정 값 중 하나만 선택하게 할 때
- 예
색깔 : 빨강, 녹색, 파랑 / 성별 : 남, 여
열거형 정의
enum 열거형명{
열거형 정의
}
enum Planet {
case Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune
} // 하나의 case문에 멤버들 나열하는 것도 가능
enum Compass {
case North
case South
case East
case West
}
- // var x : Compass // Compass형 인스턴스 x
- print(Compass.North) // North
- var x = Compass.West //print(type(of:x)) // Compass?
- x = .East // print(x) // East?
문맥에서 타입의 추록이 가능한 시점 (등호 좌변의 변수 타입이 확정적일 때)에는 열거형명 생략 가능
열거형 멤버별 기능 정의
enum Compass {
case North
case South
case East
case West
}
var direction : Compass
direction = .South
switch direction { //swith의 비교값이 열거형 Compass
case .North: // direction이 .North이면 "북" 출력
print("북")
case .South:
print("남")
case .East:
print("동")
case .West:
print("서") // 모든 열거형 case를 포함하면 default 없어도 됨
}
Swift 열거형 멤버에는 메서드도 가능
enum Week: String {
case Mon, Tue, Wed, Thur, Fri, Sat, Sun
func printWeek() { // 메서드도 가능
switch self {
case .Mon, .Tue, .Wed, .Thur, .Fri:
print("주중")
case .Sat, .Sun :
print("주말")
}
}
}
Week.Sun.printWeek()
- 출력값
주말
열거형의 rawValue
enum Color: Int { //Hashable 프로토콜을 준수하는 기본 자료형
case red = 0
case green
case blue
}
print(Color.red)
print(Color.blue)
print(Color.red.rawValue)
print(Color.blue.rawValue)
- 출력값
red0
2
blue
String형 값을 갖는 열거형의 rawValue
enum Week: String {
case Monday = "월"
case Tuesday = "화"
case Wednesday = "수"
case Thurday = "목"
case Friday = "금"
case Saturday // 값이 지정되지 않으면 case 이름이 할당됨
case Sunday
}
print(Week.Monday)
print(Week.Monday.rawValue)
print(Week.Sunday)
print(Week.Sunday.rawValue)
- 출력값
Monday
Sunday
Sunday
월
연관값(associated value)을 갖는 Enum
enum Date {
case intDate(Int,Int,Int) // (int,Int,Int)형 연관값을 갖는 intDate
case stringDate(String) // String형 연관값을 갖는 stringDate
}
var todayDate = Date.intDate(2020,4,30)
todayDate = Date.stringDate("2020년 5월 20일")
switch todayDate {
case .intDate(let year, let month, let day):
print("\(year)년 \(month)월 \(day)일")
case .stringDate(let date):
print(date)
}
- 출력값
2020년 5월 20일
옵셔널은 연관값(associated value)을 갖는 enum
let age: Int? = 30
switch age {
case .none: //nil인 경우
print("나이 정보가 없습니다.")
case .some(let a) where a < 20:
print("미성년자입니다.")
case .some(let a) where a < 71:
print("성인입니다.")
default:
print("경로우대입니다")
}
- 출력값
성인입니다
'iOS프로그래밍기초(Smile Han) > 문법 정리' 카테고리의 다른 글
[Swift] 문법 정리 - 옵셔널 체이닝(Optional Chaining) (1) | 2024.11.24 |
---|---|
[Swift] 문법 정리 - 클래스(class) vs 구조체(struct) vs 열거형(enum) (0) | 2024.11.24 |
[Swift] 문법 정리 - extension, Swift 접근 제어(access control), 프로토콜(protocol) (0) | 2024.11.17 |
[Swift] 문법 정리 - 상속 (3) | 2024.11.10 |
[Swift] 문법 정리 - 클래스 (0) | 2024.11.10 |