@CasePathable

Swift에서 enum을 각 케이스(case)를 마치 struct의 프로퍼티처럼 다룰 수 있게 해주는 매크로다.
Swift의 struct는 \.name처럼 KeyPath를 써서 내부 값에 접근하기 쉽지만, enum은 케이스 안에 들어있는 연관값(Associated Value)에 접근하기가 번거롭다.
@CasePathable은 enum에 이 경로(CasePath)를 자동으로 생성해주는 역할을 한다.
언제 어떻게 사용하나
- TCA에서 Action enum을 정의할 때 (가장 대표적)
- 부모 Reducer가 자식 Reducer의 Action을 감지하거나 식별할 때 \Action.Cases.child 같은 형태의 경로가 필요한데, 이를 자동으로 만들어 준다.
- enum 안의 특정 값을 안전하게 끄집어내거나 변경하고 싶을 때
- 원래는 if case let 같은 복잡한 코드를 써야 하지만, CasePath를 쓰면 한 줄로 깔끔하게 처리할 수 있다.
1. 일반 enum 사용시
enum NavigationState {
case chat(ChateState)
case profile(ProfileState)
}
let state = NavifationState.chat(ChatState())
//내부에 들어있는 ChatState를 끄집어내려면 if case let을 써야 해서 번거로움
if case let .chat(chatState) = state {
print(chatState)
}
2. @CasePathable 적용 시
import CasePaths //또는 import ComposableArchitecture
@CasePathable //1. 매크로 붙이기
enum NavigationAction {
case chat(ChatAction)
case profile(ProfileAction)
}
//2. struct의 KeyPath처럼 \.chat 키워드로 간편하게 접근 가능
// TCA 내부에서 자식 액션을 매핑할 때 이 표현을 사용한다.
let chatActionPath = \NavigationAction.Cases.chat
요약
역할 : enum을 struct처럼 경로 (\.)를 써서 다룰 수 있게 만드는 매크로
TCA에서의 위치 : 최신 TCA에서는 @Reducer를 붙이면 내부 enum Action에 @CasePathable이 자동 합성되는 경우가 많다. 다만 에러가 나거나 화면 전환(PresentationAction) 등의 복잡한 액션을 매핑할 때 직접 명시해 주면 컴파일러의 경로 추론 에러를 해결할 수 있다.
'SwiftUI > study' 카테고리의 다른 글
| [TCA] @Dependency (0) | 2026.09.27 |
|---|---|
| [TCA] Effect (0) | 2026.09.26 |
| [SwiftUI/TCA] 매크로(Macro) vs 프로퍼티 래퍼(Property Wrapper) (0) | 2026.08.28 |
| @Bindable (0) | 2026.08.26 |
| [TCA] @Presents (0) | 2026.08.25 |
댓글