// // BaseCoordinator.swift // Paiai_iOS // // Created by FFIB on 2019/4/29. // Copyright © 2019 FFIB. All rights reserved. // import RxSwift import Foundation public class BaseCoordinator { typealias CoordinationResult = ResultType let disposeBag = DisposeBag() let didCancel = PublishSubject() private let identifier = UUID() private var childCoordinators = [UUID: Any]() private func store(coordinator: BaseCoordinator) { childCoordinators[coordinator.identifier] = coordinator } private func free(coordinator: BaseCoordinator) { childCoordinators[coordinator.identifier] = nil } func coordinate(to coordinator: BaseCoordinator) -> Observable { store(coordinator: coordinator) return coordinator.start() .do(onNext: { [weak self] _ in self?.free(coordinator: coordinator) }) } func start() -> Observable { fatalError("Start method should be implemented.") } }