250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Swift
- UIAccessibility
- dart
- Leetcode
- algorithm
- listview
- Widget
- COMMIT
- Extentsion
- pubspec
- keyWindow
- github
- OSLog
- designPattern
- Equatable
- GIT
- basic
- ToDoRim
- enumerations
- SwiftGen
- protocol
- IOS
- pubspec.yaml
- xcode
- toyproject
- tip
- it
- flutter
- swiftlint
- reetcode
Archives
- Today
- Total
수니의 개발새발
[iOS/Swift/Basic] 열거형 Enumerations : 항목 순회 - CaseIterable 본문
728x90
반응형
📑 이전글
[iOS/Swift/Basic] 열거형 Enumerations : 원시값 Raw Values, 연관값 Associated Values
CaseIterable
- Swift 프로그래밍 언어에서 제공하는 프로토콜
- 이 프로토콜을 채택한 열거형(Enumeration)은 모든 항목(case)을 순회할 수 있다.
allCases
- CaseIterable을 채택한 열거형의 모든 항목(case)를 얻을 수 있다.
CaseIterable 활용한 열거형(Enumeration)의 항목 순회
- 기본형
// CaseIterable Protocol을 채택한 Enumeration
enum Color: CaseIterable {
case red, green, blue, yellow
}
// CaseIterable 프로토콜을 채택했기 때문에 allCases 속성을 통해 모든 케이스를 얻을 수 있다.
let allColors = Color.allCases
for color in allColors {
print(color) // red green blue yellow
}
단순한 열거형(Enumeration)에는 CaseIterable을 채택해 주는 것만으로 allCases 프로퍼티를 사용할 수 있지만,
조금 복잡해지는 열거형(Enumeration)의 경우 allCases 프로퍼티를 직접 구현해 주어야 한다.
- 플랫폼별 사용 조건을 추가하는 경우 : available 속성을 갖는 열거형(Enumeration)
// 플랫폼별 사용 조건을 추가하는 경우 : available 속성을 갖는 열거형(Enumeration)
enum Color: CaseIterable {
case red, green, blue, yellow
@available(iOS 13.0, *)
case white
// allCases 프로퍼티를 직접 구현
static var allCases: [Color] {
let all: [Color] = [.red, .green, .blue, .yellow]
#if os(iOS)
return all + [.white]
#else
return all
#endif
}
}
let allColors = Color.allCases
for color in allColors {
print(color) // 실행환경에 따라 다른 결과
}
- 연관 값(Associated Values)을 갖는 열거형(Enumeration)의 경우
enum Burger: CaseIterable {
case bulgogi
case shrimp
case cheese
}
enum Drink: CaseIterable {
case coke
case fanta
}
// Associated Values을 가지는 Enumerations
enum Menu: CaseIterable {
case set(burger: Burger, drink: Drink)
case single(burger: Burger)
static var allCases: [Menu] {
return Burger.allCases.reduce([]) { (result, burger) -> [Menu] in
result + Drink.allCases.map { (drink) -> Menu in
Menu.set(burger: burger, drink: drink)
}
}
+ Burger.allCases.map(Menu.single)
}
}
print(Menu.allCases.count) // 9 : 모든 경우의 수
print(Menu.allCases) // 모든 경우의 항목(case) 컬렉션
처음 열거형(Enumeration)을 정의하고 allCases를 구현한 이후에 항목(case)를 추가할 일이 생긴다면 꼭 잊지 말고 allCases를 다시 살펴봐야겠다.
🙋🏻♀️ 참고
야곰, ⌜스위프트 프로그래밍: Swift5⌟, 한빛미디어(2019)
728x90
반응형
'iOS - Swift' 카테고리의 다른 글
[iOS/Swift/Basic] 열거형 Enumerations : 비교 가능한 열거형 - Comparable (0) | 2024.01.26 |
---|---|
[iOS/Swift/Basic] 열거형 Enumerations : 순환 열거형 - indirect (0) | 2024.01.26 |
[iOS/Swift/Basic] 열거형 Enumerations : 원시값 Raw Values, 연관값 Associated Values (2) | 2024.01.24 |
[iOS/Swift/Basic] 컬렉션형(Array, Dictionary, Set) (0) | 2024.01.23 |
[iOS/Swift/Basic] 주석과 퀵헬프(Quick Help) (0) | 2024.01.05 |
Comments