본문 바로가기
Category/iOS

CaseIterable이란?

by Corinee 2024. 9. 22.
728x90
반응형

CaseIterable은 Swift의 프로토콜로, 열거형(enums)의 모든 케이스를 컬렉션 형태로 쉽게 순회하거나 접근할 수 있도록 해줍니다. 이 프로토콜을 채택하면 열거형의 모든 케이스를 배열(Array)로 얻을 수 있게 됩니다.

기본 사용법

열거형에 CaseIterable을 채택하면, 컴파일러가 자동으로 열거형의 모든 케이스를 allCases라는 배열 형태의 프로퍼티로 제공합니다.

enum Direction: CaseIterable {
    case north
    case south
    case east
    case west
}

위 코드는 Direction 열거형에 CaseIterable을 채택한 예시입니다.

allCases 사용

allCases는 자동으로 생성되는 배열로, 열거형의 모든 케이스를 순차적으로 접근할 수 있습니다.

for direction in Direction.allCases {
    print(direction)
}

출력 결과:

 
north
south
east
west

주요 특징

  1. 자동 배열 생성: CaseIterable을 채택하면 열거형의 모든 케이스를 자동으로 배열로 제공합니다. allCases를 통해 배열에 접근할 수 있습니다.
  2. 케이스 순회: allCases를 통해 열거형의 모든 케이스를 쉽게 순회할 수 있어, 반복적인 작업을 간결하게 처리할 수 있습니다.
  3. 사용 제한: CaseIterable은 열거형에서 연관 값을 가지지 않는 경우에만 사용 가능합니다. 만약 열거형이 연관 값을 가진다면, 컴파일러는 자동으로 allCases를 생성해주지 않으며, 수동으로 작성해야 합니다.

예시 1: 기본적인 CaseIterable 사용

 
enum Beverage: CaseIterable {
    case coffee, tea, juice
}

for drink in Beverage.allCases {
    print(drink)
}

결과:

 
coffee
tea
juice

예시 2: allCases.count를 이용해 케이스 수 확인

enum Season: CaseIterable {
    case spring, summer, autumn, winter
}

print("총 계절의 수: \(Season.allCases.count)")

결과:

 
총 계절의 수: 4

예시 3: 연관 값이 있는 경우는 CaseIterable 사용 불가

다음과 같이 연관 값이 있는 열거형에서는 CaseIterable을 사용할 수 없습니다.

enum Result: CaseIterable {
    case success(data: String)  // 연관 값이 있음
    case failure(error: String)
}

위 코드는 컴파일 오류가 발생합니다. 이런 경우에는 allCases를 수동으로 구현해야 합니다.

결론

  • CaseIterable은 열거형의 모든 케이스를 자동으로 배열 형태로 제공하여, 열거형의 케이스들을 쉽게 순회하거나 접근할 수 있게 해줍니다.
  • 연관 값이 없는 열거형에서만 자동으로 사용 가능하며, 연관 값이 있는 열거형에서는 allCases를 직접 구현해야 합니다.

CaseIterable은 열거형을 순회하거나 사용해야 할 때 매우 유용한 기능입니다.

'Category > iOS' 카테고리의 다른 글

ZStack이란?  (0) 2024.09.22
enum(열거형)이란?  (1) 2024.09.22
@StateObject와 @ObservedObject의 상태 관리 방식 차이  (1) 2024.09.21
ObservableObject와 @StateObject, @ObservedObject란?  (0) 2024.09.21
SwiftUI의 @Binding이란?  (0) 2024.09.21