Swift) Enum(열거형)
Enum(열거형)
관련있는 데이터들이 맴버로 구성되어 있는 자료형 객체
열거형을 사용하는 이유는??
-
원치 않는 값이 잘못 입력되는 것을 방지
-
입력 받을 값이 한정되어 있을 때
-
특정 값 중 하나만 선택하게 할 때
예시
-
성별 - 남자, 여자
-
색깔 - 빨강, 녹색, 파랑
-
스위치 - ON, OFF
-
바지 - 트레이닝바지, 청바지, 스커트, 슬랙스
// 열거형 정의
enum 열거형이름 {
열거형 정의
{
// 하나의 case문에 members 나열 가능
enum 바지 {
case 츄리닝, 청바지, 스커트, 슬랙스, 면바지
}
// 또는 하나의 case문에 하나의 member 저장
enum 태양계 {
case 수성
case 금성
case 지구
case 화성
case 목성
case 토성
case 천왕성
case 해왕성
case 명왕성
}
// 열거형 member 접근
print(태양계.지구) // 지구
// 변수에 저장
var 우주 = 태양계.토성
우주.천왕성
print(우주, type(of:우주)) // 천왕성 태양계
// switch문 연결
enum Color {
case red
case green
case blue
case orange
}
var colorList: Color
colorList = .red
switch colorList {
case .red:
print("빨강")
case .green:
print("초록")
case .blue:
print("파랑")
case .orange:
print("주황")
}
// 타입 지정과 초기값 지정도 가능!!
enum Member: String {
case ropy = "루피"
case nami = "나미"
case joro = "조로"
case chopa = "초파"
}
열겨형 케이스 반복
CaseIterable 프로토콜을 채택해서 .allCases 속성 사용 (타입의 모든 컬렉션, 케이스)
enum 한글: CaseIterable {
case 가, 나, 다, 라, 마, 바, 사, 아
}
let 한글출력 = 한글.allCases.count
print("현재 입력된 한글은 \(한글출력)개") // 현재 입력된 한글은 8개
// 반복문 통해서 나열
for 나열 in 한글.allCases {
print(나열)
}
// 가
// 나
// 다
// 라
// 마
// 바
// 사
// 아
Raw Values(원시 값)
연관된 값의 대안으로 열거형 케이스는 모두 동일한 타입인 기본값 (rawValue)으로 미리 채워질 수 있다.
// 암시적 할당 rawValue
// 정수 타입의 숫자 열거형이고 하나라는 케이스에 1 기본값이 주어지고,
// 그 뒤의 둘,셋,넷,다섯 케이스에 암시적으로 원시값이 지정됨
enum 숫자: Int {
case 하나 = 1, 둘, 셋, 넷, 다섯
}
let 어떤숫자 = 숫자.둘.rawValue // 2
// 문자열 타입의 열겨형이고 기본 값은 없다.
enum 동서남북: String {
case 동, 서, 남, 북
}
let 어떤방향 = 동서남북.남.rawValue // 남
// rawValue 초기화
// (rawVlaue:)파라미터를 사용하여 이니셜 라이저를 자동으로 수신하고
// case 또는 nil을 반환. 이니셜라이저를 활용하여 새 인스턴스 생성가능
let 어떤숫자 = 숫자(rawValue: 5)
// 어떤 숫자는 숫자? 또는 숫자.다섯
let 숫자확인 = 8 {
if let 확인 = 숫자(rawValue: 숫자확인) {
switch 확인 {
case .하나:
print("하나는 1이야")
case .둘:
print("둘은 2야")
}
} else {
print("\(숫자확인)은 케이스에 포함되지 않아.")
}
// 8은 케이스에 포함되지 않아.
Comments