Skip to content

Chapter 6. Navigation.

Dmitriy Shulzhenko edited this page Sep 27, 2020 · 1 revision

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)
        }
...
}

Clone this wiki locally