[내일배움캠프] 260406 TIL - RxFlow

Bambu·2026년 4월 6일

내배캠 TIL

목록 보기
50/52

RxFlow 기본 용어

RxFlow에서는 다음과 같은 용어들을 사용합니다.

  • Flow: 각 Flow는 앱 내에서의 네비게이션 영역을 의미합니다.
  • Step: 각 Step은 '앱의 네비게이션 상태(state)'를 의미합니다.
    • "이 화면으로 가고싶어"라는 뜻이라기 보다는, "누군가 혹은 어떤 것이 이 동작을 했다"라는 의미로 보는 것이 적절합니다.
    • "누군가 혹은 어떤 것이 이 동작을 했다"라는 state가 전달되면, RxFlow는 현재의 네비게이션 Flow에 알맞은 화면을 선택합니다.
  • Stepper: Steps를 방출할 수 있는(emit) 존재입니다. Stepper는 Flow의 모든 네비게이션 동작을 트리거합니다.
  • Presentable: 나타내질 수 있는 (presented) 추상적 존재를 의미합니다. UIViewController와 Flow는 Presentable입니다.
  • NextFlowItem: Reactive 메커니즘 내에서, '새로운 Step'을 생성해낼 존재가 무엇인지 Coordinator에게 알려줍니다.(tell)
    • withNextPresentable: 다음 Presentable을 의미합니다.
      => Steps는 Presentable이 존재해야 생성될 수 있습니다.
      Presentable 없이 Steps가 실행되지 않도록 하기 위해 Presentable의 존재도 함께 Coordinator에 알립니다.
    • withNextStepper: 다음 Stepper(Step을 생성해낼 존재)를 의미합니다.
  • Coordinator: Flows와 Steps를 조합하는 역할을 합니다.
    • RxFlow에서 구현해두었으므로 우리가 직접적으로 구현하지 않습니다.

use 메소드의 executed 시점

class AppFlow {
	switch step {
    case .main:
    	let plantTabFlow = PlantTabFlow()
        let calendarTabFlow = CalendarTabFlow()
        let myInfoTabFlow = MyInfoTabFlow()
        
        // Flow를 준비 - 클로저는 Flow가 배치될 준비가 되었을 때(Flow의 첫 번째 화면이 선택되었을 때) 실행될 동작
            Flows.use(plantTabFlow, calendarTabFlow, myInfoTabFlow, when: .created) { [weak self] plant, calendar, my in
                ...
            }
            
            return .multiple(flowContributors: [
                .contribute(withNextPresentable: plantTabFlow, withNextStepper: OneStepper(withSingleStep: AppStep.plantTab)),
                .contribute(withNextPresentable: calendarTabFlow, withNextStepper: OneStepper(withSingleStep: AppStep.calendarTab)),
                .contribute(withNextPresentable: myInfoTabFlow, withNextStepper: OneStepper(withSingleStep: AppStep.myInfoTab))
            ])
    }
}

Flows.use(_ , when: ) 메서드에서, when 시점에는 .createdready 2가지가 존재한다.

  • .created: The completion block will be executed instantly
  • .ready: The completion block will be executed once the sub flows (SettingsFlow in the example) have emitted a first step

Flows.use 메서드는 주어진 Flow들의 초기 설정을 완료하고 클로저를 실행한다. 이때, 클로저가 실행될 시점은 when 매개변수로 결정한다.

.created의 경우에는 즉시 클로저를 실행한다.
.ready의 경우에는 서브 Flow가 첫 번째 step을 방출했을 때 실행한다.

위 코드의 경우, Flow가 별도로 첫 step을 방출하지 않으므로 .created를 사용하였다.

profile
안녕하세요, iOS 개발을 공부하고 있는 Bambu입니다. (프로필: Swifticons)

0개의 댓글