视图模型应该对视图控制器中的事件做出反应吗?

dcc*_*rmo 1 iphone mvvm ios reactive-cocoa

在项目的某些部分采用 ReactiveCocoa 的同时,我已经实施了 MVVM 范式有一段时间了。我有一个关于与视图相关的对象的生命周期的简单问题。

想象一下,无论何时View从屏幕上消失,View模型都需要更新对象中的某些内容。这个更新应该由模型调用ViewController还是View模型可以观察到,例如,viewWillDisappear SelectorViewController并对其做出反应?这会是一个不好的做法吗?

Mic*_*uba 5

您使用 MVVM 模式视图(和视图控制器,在 Cocoa 中也被视为视图层的一部分)与模型分离。这意味着视图模型不应该知道关于视图控制器的任何信息。

正如描述的这个帖子,最好你甚至不应该导入UIKit在您的视图模型。

换句话说,视图模型应该可重用以不同方式显示相同的数据:您可能希望在视图控制器UIView其他地方的普通子类中显示数据(考虑在点击后显示PersonViewModelinPersonTableViewCell和 in aPersonDetailsViewController一个单元格 - 我认为这是一个很常见的场景)。

如果您以某种方式viewWillDisappear在视图模型中观察,它与UIViewController子类紧密耦合,不能与UIView子类一起使用。

应通过以下方式在视图控制器中调用对视图模型的更新:

- (void)viewWillDisappear:(BOOL)animated
  [super viewWillDisappear:animated];
  [self.viewModel updateStuff];
}
Run Code Online (Sandbox Code Playgroud)