Chapter 6. Navigation. - dmsl1805/Cookbook GitHub Wiki

Actually we can have so much different binders as we want.

For example we can separate navigation like this

import UIKit
import RxSwift
import RxCocoa

final class NavigationBinder<Prop, Transition, ViewController>: ViewControllerBinder
    where Transition: Transitioning,
    Transition.Prop == Prop,
    ViewController: UIViewController,
ViewController: DisposeContainer {
    
    unowned let viewController: ViewController
    private let transition: Transition
    private let driver: Driver<Prop>
    
    init(viewController: ViewController,
         transition: Transition,
         driver: Driver<Prop>) {
        self.viewController = viewController
        self.transition = transition
        self.driver = driver
        
        bind()
    }
    
    func dispose() { }
    
    func bindLoaded() {
        driver
            .drive(onNext: transition.perform)
            .disposed(by: viewController.bag)
    }
}
extension NavigationBinder: StaticFactory {
...
     
        static func pop(viewController: ViewController,
                            driver: Driver<Void>,
                            animated: Bool = true) -> NavigationPopBinder<ViewController> {
            let transition = NavigationPopTransition(isAnimated: animated, viewController: viewController)
            return NavigationPopBinder(viewController: viewController,
                                       transition: transition,
                                       driver: driver)
        }
...
}
⚠️ **GitHub.com Fallback** ⚠️