열거형: 연관된 항목들을 묶어서 표현할 수 있는 타입.
배열이나 딕셔너리 같은 타입과는 다르게, 프로그래머가 정의해준 항목 값 이외에는 추가/수정이 불가.
딱 정해진 값만 열거형 값에 속할 수 있다.
열거형 각 항목이 원시값(Raw Value)이라는 형태로(정수, 실수, 문자 타입 등의) 실제 값을 가질수도 있다.
또는 연관값을 사용하여 다른 언어에서 공용체라고 불리는 값의 묶음도 구현 가능.
열거형은 switch 구문과 만났을 때 멋지게 활용 가능.
*기본 열거형
enum
enum School {
case primary
case elementary
.
.
.
}
*원시 값(raw value) p104~
열거형의 각 항목은 자체로도 하나의 값이지만 항목의 원시값도 가질 수 있다.
즉, 특정 타입으로 지정된 값 가질 수 있다는 뜻.
특정 타입의 값을 원시값으로 가지고 싶다면, 열거형 이름 오른쪽에 타입 명시해주면 된다.
원시값을 사용하고 싶다면, rawValue라는 프로퍼티를 통해 가져올 수 있다.
*연관 값
연관 값은 각 항목 옆에 소괄호로 묶어 표현할 수 있다.
*항목 순회
1) CaseIterable 프로토콜을 활용한 열거형의 항목 순회
열거형에 포함된 모든 케이스를 알아야 할 때.
enum School: CaseIterable {
case primary
case elementary
case middle
...
}
let allCases: [School] = School.allCases
print(allCases)
//[School.primary, School.elementary, ... School.graduate]
2)원시값을 갖는 열거형의 항목 순회
3)available 속성을 갖는 열거형의 항목 순회
*순환열거형
열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용.
순환열거형을 명시하고 싶다면 indirect 키워드 사용.
특정 항목에만 한정 -> case 키워드 앞에 indirect붙인다
열거형 전체에 적용 -> enum 키워다 앞에 indirect 붙인다.
*비교 가능한 열거형
Comparable 프로토콜을 준수하는 연관 값만 갖거나
연관 값이 없는 열거형은 Comparable 프로토콜을 채택하면 각 케이스를 비교할 수 있다.
http://labs.brandi.co.kr/2021/09/01/kimjh3.html
https://www.simpleswiftguide.com/how-to-use-switch-statement-with-enum-in-swift/
CaseIterable & Conclusion
그래서 검색하다가 알게된 CaseIterable 프로토콜. AllCases를 얻을 수 있어요.
enum: CaseIterable { // 추가
// static let allItems 는 지운다
}
func printDemoText(_ index: Int) {
var demoText: String? // 로그 찍을 변수
DemoFlag.allCases.forEach { // allCases를 가져올 수 있다.
if $0.rawValue.index == index {
demoText = $0.rawValue.text
}
print("text = \(demoText)")
}
출처: 야곰 swift 문법 책
'iOS > iOS Swift 문법' 카테고리의 다른 글
iOS swift 흐름제어 (0) | 2022.07.16 |
---|---|
iOS swift 연산자 (0) | 2022.07.14 |
iOS swift <집단자료형> - 배열 (0) | 2022.06.03 |
iOS swift 제어전달문 (4가지) / 구문레이블 (0) | 2022.06.03 |
iOS swift switch구문 (0) | 2022.06.03 |