Вам нужны два разных побочных эффекта, поэтому имеет смысл иметь две подписки. Чтобы предотвратить вложение, вы можете сделать что-то в следующих строках:
let viewControllerToPresent = button.rx.tap.map { _ in
return MyViewController()
}.share()
viewControllerToPresent.subscribe(onNext: { [unowned self] viewController in
self.view.pushViewController(viewController)
}.disposed(by: self.disposeBag)
viewControllerToPresent.flatMapLatest { viewController in
viewController.myPublishRelay.asObservable()
}.subscribe(onNext: { value in
// do something with value
}.disposed(by: self.disposeBag)
Здесь важен вызов share
, иначе отображение после rx.tap
произойдет дважды, что заставит нас подписаться на реле публикации контроллера представления, которое не , которое мы представили.