728x90
![]() |
|
열거형 (Enumeration)
- 연관된 항목들을 묶어서 표현할 수 있는 타입
- 스위프트에서는 다른 언어와 달리 각 열거형이 고유의 타입으로 인정된다.
- 배열, 딕셔너리와 다르게 미리 정의해준 항목 값 외에는 추가, 수정 불가능
- 원시 값 (Raw Value) : 정수, 실수, 문자 등의 각 항목에 부여하는 실제 값
- 연관 값 (Associated Values) : 다른 언어에서 공용체라고 불리는 값의 묶음을 구현
열거형을 사용해야 할 경우
- 제한된 선택지를 주고 싶을 때
- 정해진 값 외에는 입력 받고 싶지 않을 때
- 예상된 입력 값이 한정되어 있을 때
1. 기본
- enum 키워드로 선언
- case 키워드로 항목 지정
import UIKit
import Foundation
enum Country {
case Korea
case Japan
case China
case America
case Mexico
}
let myCountry : Country = .Korea
let friendCountry : Country = .America
print(myCountry)//Korea
print(friendCountry)//America
2. 원시 값 (Raw Value)
- 선언한 열거형 이름 뒤에 타입을 선언해서 항목마다 원시 값 지정 가능
import UIKit
import Foundation
enum Country : Int {
case Korea = 1
case Japan = 2
case China = 3
case America = 4
case Mexico = 5
}
let myCountry : Country = .Korea
let friendCountry : Country = .America
print(myCountry.rawValue)//1
print(friendCountry.rawValue)//4
3. 연관 값 (Associated Value)
- 각 항목이 자신과 연관된 값을 가질 수 있다.
- 각 항목 옆에 소괄호로 묶어서 표현
- 모든 항목이 연관 값을 가질 필요는 없다.
import UIKit
import Foundation
enum Country {
case Korea(city : String, startFrom : Int)
case Japan
case China
case America
case Mexico
}
let myCountry : Country = .Korea(city: "Seoul", startFrom: 1945)
print(myCountry)//Korea(city: "Seoul", startFrom: 1945)
4. 항목 순회
- 열거형의 모든 케이스를 알아야할 때 사용
- CaseIterable 프로토콜을 채택하면 열거형에 allCases라는 이름의 타입 프로퍼티가 생성되어 모든 케이스의 컬렉션을 생성해줌
import UIKit
import Foundation
enum Country : CaseIterable {
case Korea
case Japan
case China
case America
case Mexico
}
let allCountry : [Country] = Country.allCases
print(allCountry)//[Country.Korea, Country.Japan, Country.China, Country.America, Country.Mexico]
5. 비교 가능한 열거형
- Comparable 프로토콜을 준수하는 연관 값만 가지거나, 연관 값이 없는 열거형은 Comparable 프로토콜을 채택해서 각 케이스를 비교할 수 있다.
- 앞에 위치한 케이스가 더 작은 값
import UIKit
import Foundation
enum Country : Comparable {
case Korea
case Japan
case China
case America
case Mexico
}
var countries : [Country] = [.America, .Japan, .Korea, .China, .Mexico]
countries.sort()
print(countries)//[Country.Korea, Country.Japan, Country.China, Country.America, Country.Mexico]
728x90
'Swift' 카테고리의 다른 글
[Swift] 프로퍼티 (Property) (0) | 2020.12.26 |
---|---|
[Swift] Extension (0) | 2020.12.26 |
[Swift] 컬렉션형 (0) | 2020.12.20 |
[Swift] Tuple 튜플 (0) | 2020.12.19 |
[Swift] 데이터 타입 고급 (0) | 2020.12.19 |
댓글