스위프트에서 열거형은 같은 부류에 속하는 요소들을 묶어서 표현할 수 있는 타입입니다. 다른 타입들과 다르게 한번 선언한 이후에는 추가하거나 수정이 불가합니다. 그래서 보통 정해진 범위 내의 값들을 다룰 때 많이 사용합니다.
1. 열거형의 선언 방법
enum Animal // 열거형 키워드 enum을 사용해 Animal이라는 이름의 열거형을 선언합니다. { case dog // dog, cat, lion ,tiger는 Animal 열거형의 항목입니다. case cat // 각 항목은 그 자체로 모두 고유한 값을 지닙니다. case lion case tiger } // 다음과 같은 형태로 열거형을 선언할 수 있습니다. enum Animal { case dog, cat, lion, tiger } |
2. 열거형의 변수 생성 및 값 수정
var animal: Animal = Animal.dog // 열거형 변수 animal의 값을 항목 dog로 초기화 var animal2: Animal = Animal // animal2를 Animal의 열거형으로 선언 animal2 = Animal.cat // animal2를 cat으로 초기화 animal = .lion // 열거형의 속해있는 항목 lion으로 수정 print(animal) // lion 출력. -> 열거형의 항목은 그 자체로 타입이기 때문에 Int, String 등을 지정하지 않아도 된다. |
3. 열거형의 원시 값 지정
enum Animal: String // 열거형의 원시 값을 String 타입으로 지정하여 선언할 수 있습니다. { case dog = "강아지" // 열거형의 각 항목의 값을 String 타입으로 지정 case cat = " 고양이" case lion = "사자" case tiger } var animal: Animal = Animal.dog |
4. 열거형의 원시 값을 이용한 초기화
var animal = var animal = Animal(rawValue:"강아지") // 열거형 원시 값을 통한 초기화 print(Animal(rawValue:"강아지")) // Optional(SwiftPlayground.Animal.dog)를 출력한다. //즉 위의 열거형 변수를 초기화할 수 있는 값이다. |
5. 열거형의 연관 값 지정
enum Apple { case iPhone(iOS: Double) case iPad(iPadOS: Double) case airPod(grade: String) case waTch(type: String) } // 열거형 타입으로 회사 Apple과 연관된 제품들을 표시할 수 있습니다. var myAppleThings: Apple myAppleThings = .iPhone(iOS: 13.1) myAppleThings = .iPad(iPadOS: 13.2) // 내가 가진 Apple 아이폰과 아이패드의 버전을 할당합니다. myAppleThings = .airPod(grade: "airPod pro") myAppleThings = .waTch(type: "HERMES") // 내가 가진 Apple 에어팟과 와치의 형태를 할당합니다. enum iPhoneVersion { case iOS12, iOS13, iOS14 } // 아이폰 버전을 나타내는 열거형을 선언합니다. enum macBookType { case Air, Pro } // 맥북의 버전을 나타내는 열거형을 선언합니다. enum Apple { case iPhone(version: iPhoneVersion) // 연관 값을 이전에 선언한 열거형으로 사용할 수 있습니다. case macBook(type: macBookType) } // 애플의 제품을 표현하는 열거형을 선언합니다. var myiPhone: iPhoneVersion = .iOS13 var myMacbook: macBookType = .Pro // 열거형 변수를 선언하며, 초기값을 선언합니다. var myAppleThings: Apple = Apple.iPhone(version:myiPhone) myAppleThings = Apple.macBook(type: myMacbook) // 열거형 변수를 선언하며, 이전에 사용한 열거형 변수를 초기값으로 선언합니다. |
5. 열거형의 항목 순회
enum animal: CaseIterable // 'CaseIterable' 를 사용하면 모든 case를 반환할 수 있는 allCases 프로퍼티 사용이 가능합니다. enum animal: String, CaseIterable // 열거형이 원시 값을 갖는다면 ','를 사용해서 구분해줍니다. { case cat case dog case lion case tiger } let all: [animal] = animal.allCases // 배열 타입의 객체를 반환합니다. print(all) // 모든 case 항목을 출력합니다. // 그러나 'CaseIterable'를 사용하더라도 'allCases'를 사용하지 못하는 경우가 2가지 있습니다. 먼저 '열거형 내 available 속성을 통해 특정 케이스를 플랫폼에 따라 사용여부를 결정한다면 사용하지 못하고, 직접 구현해주어야 합니다. // 추가적으로 열거형이 연관 값을 가질 때 입니다. 역시 마찬가지로 직접 구현해주어야 합니다. 여기서는 다루지 않으니, 추후에 추가하거나, 다른 글로 작성해보겠습니다. |
6. 순환 열거형
저도 공부하는 입장에서 조금 어려운데요. 순환 열거형은 열거형 항목의 연관 값이 열거형 자신의 값(자기 자신을 가리키는)으로 지정하려고 할 때 사용합니다. 이때 키워드는 indirect를 사용합니다.
indirect enum calculation // 맨 앞에 indirect는 전체 열거형 각각의 항목에 순환 열거형을 지정합니다. { case number(Int) // 특정 항목 앞에 indirect를 명시하면 해당 항목만 순환 열거형임을 지정합니다. case add(calculation, calculation) case sub(calculation, calculation) } func evaluate(_ expression: calculation) -> Int // 'calculation' 열거형을 기준으로 생성한 Int를 리턴하는 함수 { switch expression { case .number(let value): return value case .add(let l, let r): return evaluate(l) + evaluate(r) // evaluate안의 evaluate는 자신을 또 호출하는 형식입니다. case .sub(let l, let r): return evaluate(l) - evaluate(r) } } let one = calculation.number(1) // 숫자 1을 넣은 'calculation' 열거형을 생성합니다. let two = calculation.number(2) // 숫자 2를 넣은 'calculation' 열거형을 생성합니다. let add= calculation.add(one, two) // 위에서 생성한 열거형 2개를 인자로 넣은 열거형을 생성합니다. let result = evaluate(add) // 해당 함수를 실행 후 결과 값을 반환합니다. print(result) // 3 |
추후 연구를 하면서 내용이 변경되거나, 수정할 사항이 생기면 업데이트 예정입니다.
'스위프트(Swift)' 카테고리의 다른 글
스위프트(Swift) - 컬렉션 타입 세트(set) (0) | 2020.11.07 |
---|---|
스위프트(Swift) - 컬렉션 타입 딕셔너리(Dictionary) (0) | 2020.11.07 |
스위프트(Swift) - 사용자 데이터 타입 튜플(Tuple) 사용 방법 (0) | 2020.10.29 |
스위프트(Swift) - 컬렉션 타입 배열(Array) 사용 방법 (0) | 2020.10.27 |
스위프트(Swift) - 데이터 타입(자료형) (0) | 2020.10.26 |