2

每次我们解析一个协议/类时,我们都会得到一个新对象。我的协调员需要一个视图模型,而我的控制器需要相同的视图模型。

internal class LoginFactory: Assembly {
func assemble(container: Container) {
    let delegate = UIApplication.shared.delegate as? AppDelegate
    container.register(LSViewModel.self) { res in
        return LSViewModel()
    }
    container.register(LSCoordinator.self, factory: { res in
        let cord = LSCoordinator(window: (delegate?.window)!)
        cord.viewModel = res.resolve(LSViewModel.self)
        return cord
    })
    container.register(LSViewController.self) { res in
        let cont = StoryboardScene.Login.lsViewController.instantiate()
        cont.viewModel = res.resolve(LSCoordinator.self)?.viewModel
        return cont
    }
}

}

协调员就像

internal final class LSCoordinator: BaseCoordinator<Void>, Coordinator, HasDisposeBag {

private let window: UIWindow
weak var navigationController: UINavigationController!
//LSViewModel implements LSViewModelType
var viewModel: LSViewModelType!
init(window: UIWindow) {
    self.window = window
}

func start() -> Observable<Void> {
    let lslViewController: LSViewController = DependencyManager.getResolver().resolve(LSViewController.self)!
    navigationController = UINavigationController(rootViewController: lsController)

    viewModel.outputs.doneTapped
        .subscribe(onNext: { [weak self] in self?.showLoginTypes() }).disposed(by: disposeBag)
    window.rootViewController = navigationController
    window.makeKeyAndVisible()
    return .never()
}

func showLoginTypes() {
    print(“blah blah”)
}

}

问题是,当我试图在我的 lsViewController 中注入 viewModel 时,会创建一个不同的 lsViewModel 实例。因此,Rx 绑定不起作用,并且打印语句未执行。有没有办法将相同的视图模型传递给协调器和控制器?

4

0 回答 0