ReactorKit

reactorkit.png
사내 프로젝트에서 ReactorKit을 메인으로 사용하고 있다. RxSwift 기반의 단방향 프레임워크이다.

View

  • State에 따른 데이터 표현, bind(reactor: )를 가짐
  • bind()에서 View→ Reactor 흐름의 Action, Reactor → View 의 State를 모두 바인딩, enum type을 사용하여 동작 정의
  • reactor의 프로퍼티가 변경되는 시점(할당, 초기화 등)에 bind가 실행됨

Reactor

  • Action, Mutation, State를 가짐

  • Action

    • View → Reactor 흐름의 유저가 실행하는 동작의 종류를 가지는 enum, 연관값으로 값을 넘겨준다.
  • Mutation

    • Action이 들어왔을 때 Action마다의 실행할 동작의 종류를 정의, 마찬가지로 연관값으로 값을 넘겨준다.
  • State

    • View가 가져갈 프로퍼티가 들어있는 구조체
  • initialState

    • View에서 처음 시작할 상태를 정의
  • mutate(action: Action) → Observable

    • 각 action을 판단하는 부분, action을 판단하고 판단 결과에 따라 mutation의 옵저버블을 리턴
    • 사이드이펙트는 여기, API콜도 여기(비동기 작업)
  • reduce(state: State, mutation: Mutation) → State

    • mutation에 대해 판단하여 state의 복사본을 조작하여 돌려줌
    • 순수함수, State 구조체를 리턴(UI이기 때문에 동기작업), 사이드이펙트 없도록 구현할것
  • transform: 그대로 받아서 다음으로 전달, mutation에서 mutation을 일으키는것과 같이 다시 옵저버블을 내리고 싶을때 사용