열거형은 연관된 항목들을 묶은 타입
프로그래머가 정의한 항목 외에는 추가 / 수정 불가
주로 다음과 같은 경우 사용
- 제한된 선택지 제공
- 정해진 값 외에 입력 제한
- 입력 값 한정
기본 열거형
키워드 enum으로 선언
각 항목 자체가 고유의 값임
Fruit 열거형의 선언
enum Fruit {
case apple
case banana
case kiwi
case melon
}
// 위와 같은 표현 (한 줄로도 작성 가능)
enum Fruit {
case apple, banana, kiwi, melon
}
Fruit 열거형 변수의 생성 및 값 변경
var myFruit: Fruit = Fruit.apple
print(myFruit) // apple
// 위의 코드와 같은 표현
var yourFruit: Fruit = .banana
print(yourFruit) // banana
// 값 변경
myFruit = .kiwi
print(myFruit) // kiwi
원시 값
열거형의 각 항목 자체도 값으로 사용할 수 있지만,
원시 값 (Raw Value)도 가질 수 있음
이때 열거형 이름 오른쪽에 타입을 명시하여 사용
원시 값을 사용하고 싶다면? rawValue 키워드 사용
열거형의 원시 값 지정과 사용
enum Fruit: String {
case apple = "맛 좋은 청송사과"
case banana = "달디 단 델몬트 바나나"
case kiwi = "속이 노란 골든키위"
case melon = "메론바 먹고 싶을땐 멜론"
}
var myFruit: Fruit = Fruit.apple
print("내가 제일 좋아하는 과일은 \(myFruit.rawValue) 입니다.")
// 내가 제일 좋아하는 과일은 맛 좋은 청송사과 입니다.
// rawValue를 사용하지 않는다면?
// 항목, 그 자체가 호출
print("내가 제일 좋아하는 \(myFruit)")
// 내가 제일 좋아하는 apple
모든 항목에 원시 값을 주지 않아도 됨
String 타입으로 원시 값을 지정했다면?
각 항목은 항목 이름 자체를 원시 값으로 갖게 되지만
Int 타입으로 원시 값을 지정했다면?
첫 항목을 기준으로 0부터 1씩 늘어난 값을 갖음
열거형의 원시 값 일부 지정 및 자동 처리 - 1
var yourFruit: Fruit = Fruit.strawberry
print("당신이 좋아하는 과일은 \(yourFruit.rawValue)인가요?")
// 당신이 좋아하는 과일은 strawberry인가요?
print("당신이 좋아하는 과일은 \(yourFruit)인가요?")
// 당신이 좋아하는 과일은 strawberry인가요?
열거형의 원시 값 일부 지정 및 자동 처리 - 2
enum CountNumbers: Int {
case zero
case one = 1
case two
case three = 3
case four
case five
}
var myNumber: CountNumbers = CountNumbers.zero
print(myNumber.rawValue) // 0
myNumber = CountNumbers.one
print(myNumber.rawValue) // 1
myNumber = CountNumbers.two
print(myNumber.rawValue) // 2
myNumber = CountNumbers.four
print(myNumber.rawValue ) // 4
연관 값
열거형 내의 항목(case)는 연관 값을 각 항목 옆에 소괄호로 묶어 표현
연관 값을 갖는 열거형
enum Market {
case apple(taste: String, price: Int)
case clothes(size: String)
case pizza(taste: String, price: Int, topping: [String])
case water
}
var myshopping: Market = Market.apple(taste: "맛 좋은 청송 사과", price: 2000)
print(myshopping)
// apple(taste: "맛 좋은 청송 사과", price: 2000)
myshopping = .clothes(size: "XL")
print(myshopping)
// clothes(size: "XL")
myshopping = .water
print(myshopping)
// water
만약에 clothes의 size가 한정적이라면?
size도 열거형으로 표현하면 됨
여러 열거형의 응용
enum ClotheSize {
case small
case midium
case large
}
enum Market {
case clothes(size: ClotheSize)
}
var myshopping: Market = .clothes(size: ClotheSize.small)
print(myshopping)
// clothes(size: main.ClotheSize.small)
myshopping = .clothes(size: .large)
print(myshopping)
// clothes(size: main.ClotheSize.large)
'Swift' 카테고리의 다른 글
연산자 (1) | 2024.01.09 |
---|---|
데이터 타입 고급 4편 (열거형 2탄) (1) | 2024.01.08 |
데이터 타입 고급 3편 (컬렉션형) (0) | 2024.01.05 |
데이터 타입 고급 2편 (튜플) (0) | 2024.01.04 |
데이터 타입 고급 1편 (데이터 타입 안심, 타입 별칭) (0) | 2024.01.03 |