Я использую MVVM, Чистую архитектуру и RxSwift в моем проекте.Существует контроллер представления, имеющий дочерний UIView, который создается из отдельного файла .xib
на лету (поскольку он используется в нескольких сценах).Таким образом, существует две модели представления: модель представления UIViewController и модель UIView.Теперь в дочерней модели представления есть событие Rx, которое должен наблюдать родительский объект, а затем он вызовет некоторые из своих функций и функций своей модели представления.Код выглядит так:
MyPlayerViewModel:
class MyPlayerViewModel: UIView {
var eventShowUp: PublishSubject<Void> = PublishSubject<Void>()
var rxEventShowUp: Observable<Void> {
return eventShowUp
}
}
MyPlayerView:
class MyPlayerView: UIView {
var viewModel: MyPlayerViewModel?
setup(viewModel: MyPlayerViewModel) {
self.viewModel = viewModel
}
}
MyPlayerSceneViewController:
class MyPlayerSceneViewController: UIViewController {
@IBOutlet weak var myPlayerView: MyPlayerView!
@IBOutlet weak var otherView: UIView!
var viewModel: MyPlayerSceneViewModel
fileprivate var disposeBag : DisposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
self.myPlayerView.viewModel.rxEventShowUp.subscribe(onNext: { [weak self] in
self?.viewModel.doOnShowUp()
self?.otherView.isHidden = true
})
}
}
Как видите,В настоящее время я представляю myMlayer ViewModel для широкой публики, чтобы родитель мог наблюдать событие на нем.Это правильный способ сделать это?Если нет, есть ли другие предложения о лучшем пути?Благодарю.