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