UIViewController
と私のビューモデルに依存する問題があります。 基本的に私のビューモデル内でviewDidLoad
イベントを聞きたいです。RxSwift:被験者のないビューモデルからviewDidLoadを観察する
let viewModel = ViewModel()
let viewController = UIViewController(viewModel)
と私はviewDidLoad
ためRxCocoa拡張子作成しました:私は、パラメータでのViewModelをビューモデルとUIViewController
をインスタンス化Class A
を持っている瞬間
var viewDidLoad: Observable<Void> {
return self.sentMessage(#selector(Base.viewDidLoad)).map { _ in Void() }
}
を今、私は」私のビューモデル内の観測可能な部分にこれを結びつけています。私はSubjects
でそれを行うことができますが、私はちょうどObservable
を使用して反応的なアプローチをしたいです。 私はをビューモデルのコンストラクタパラメータとして注入することができますが、このようにしてアーキテクチャを壊して、UIViewController
がビューモデルを内部的にインスタンス化することを許可したくないのですが、依存。
提案がありますか?私はこのソリューションを使用しました@tomahhする おかげ
ソリューション
感謝:
私のビューコントローラ:
override func configure(viewModel: ViewModel) {
viewModel.bindViewDidLoad(rx.viewDidLoad)
}
マイビューモデル:
func bindViewDidLoad(_ viewControllerDidLoad: Observable<Void>) {
//Create observers which depend on viewControllerDidLoad
}
を導き出す計算プロパティとして定義することができビューモデルのクライアントが外部から 'viewDidLoad'を設定できるようにすることは安全です。そして 'viewDidLoad'を設定する前に' something'を使うと、 'viewDidLoad'によって放出されたイベントは受信されませんでしたか?あなたの答えをありがとうbtw –
実際に私は 'viewDidLoad'と' something'の両方を内部的に設定する 'setViewDidLoad(..)'のようなビューモデルメソッドを使ってこれらの問題を解決することができました –
あなたは、 'viewDidLoad'を設定します。たぶん別の方法は何かのためのビルダーメソッドを使用することでしょうか? 'funcのようなもの(viewDidLoad:Observableを使用) - > Observable '? –
tomahh