Swift) Enum(열거형)

2 minute read

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