TCA

CasePath

GREEN.1229 2022. 4. 6. 09:47

안녕하세요. 그린입니다🟢

이번 포스팅에서는 CasePath에 대해 학습해보겠습니다🙌

 

저는 주로 요새 Composable Architecture(TCA)를 사용하는데 타 reducer를 pullback 받아올때 keypath와는 다른 casepath를 볼 수 있었기에 이것에 대해 뭐하는 친구인지 알아보려합니다!

 

우선 이 친구는 이름에서도 느껴지지만 keypath와 비슷한 역할을 해주는 친구같죠?
그럼 이제 알아보시죠!

 

CasePath?

CasePath는 Swift에서 기본적으로 제공해주는 keypath같은 친구는 아닙니다.

즉, TCA를 만든 pointfreeco에서 커스텀하게 만들어준 오퍼레이터입니다.

그럼으로 해당 라이브러리를 토대로 보겠습니다. (사실 해당 라이브러리외에 레퍼런스는 다 번역을 거친것이기에)

우선 swift에서 열거타입 즉, enum을 사용할때 keypath처럼 사용할 수 있도록 해주는 라이브러리입니다.

TCA에서는 action을 enum으로 정의하죠?

그래서 주로 action에서 CasePath가 사용되는것 같아요🙌

enum으로 정의된 케이스 앞에 키패스처럼 슬래시(/)를 붙여줘 CasePath를 사용할 수 있습니다.

CasePath 사용예제

// Keypath
struct User {
  var id: Int
  var name: String
}

\User.id   // WritableKeyPath<User, Int>
\User.name // WritableKeyPath<User, String>

//Case Path
import CasePaths

enum Authentication {
  case authenticated(accessToken: String)
  case unauthenticated
}

/Authentication.authenticated

위는 키패스를 나타내며 아래는 케이스패스를 나타냅니다.

이렇게 Keypath의 유용한 기능, 문서에서는 4가지를 예시로 소개합니다.

1. key-value observing

2. 반응형 바인딩

3. dynamic member lookup

4. SwiftUI 환경 범위 변경

이런 것들을 CasePath를 구현해줌으로 enum에서도 가능하게 해준것이라 볼 수 있죠.

마무리

정말 간단히 CasePath에 대해 알아봤습니다.

내부 구현을 파고 파고 들어보면서 어떻게 구현되있는지 보려면 라이브러리에서

EnumReflection 파일 구현을 보면 좋겠습니다🙌

[참고자료]

https://github.com/pointfreeco/swift-case-paths?utm_source=Postype&utm_medium=iframely 

 

GitHub - pointfreeco/swift-case-paths: 🧰 Case paths bring the power and ergonomics of key paths to enums!

🧰 Case paths bring the power and ergonomics of key paths to enums! - GitHub - pointfreeco/swift-case-paths: 🧰 Case paths bring the power and ergonomics of key paths to enums!

github.com