ios – MVVM并推动ViewController:在哪里初始化下一个ViewController和ViewModel,并推动新视图?

我正在考虑一个非常简单的ViewModel和ViewController的结构,用于测试应用程序.我有一些类似的东西:

FirstViewController.m:

- (IBAction)launchButtonSelected:(id)sender
{
    [self.viewModel launchActionSelected];
}

FirstViewModel.m:

- (void)launchActionSelected
{
    // [todo] - Figure this out.
}

当在FirstViewController中选择launchButton时,我想制作和呈现SecondViewController.

我的问题:

>我应该在哪里创建SecondViewController的ViewModel有一个坚实的经验法则?
>谁应该初始化SecondViewController?
>在哪里应该将SecondViewController推送到视图层次结构? (即导航推动或模态呈现).

我个人认为:

> SecondViewController的ViewModel可能会在其初始化器中创建.这总是导致我一个混乱的路径:如果我想把信息从FirstViewModel传递给SecondViewModel?我应该在SecondViewController上公开SecondViewModel作为一个公共属性,以便我可以获取/设置值吗?
> FirstViewController应该创建SecondViewController,和
> FirstViewController应该将SecondViewController推送到屏幕上.

我的直觉认为这是一个比较简单的:我想隔离ViewControllers的演示文稿一点,让应用程序更加以ViewModel为重点,但这似乎很难做到. (即“推”ViewModels,而不是ViewControllers …但是“push”与应用程序的视觉呈现本质上相关,所以也许这是错误的思考方式.)

解决方法

很好的问题重要的是要记住,在iOS上,MVVM是一个正在出现的最新实践的新兴范例.所以你的第一个问题的答案是关于艰难和快速的规则是没有真正的.我个人将在FirstViewController的视图模型中创建SecondViewController的视图模型,因此可以在将被使用的上下文中进行配置(即:如果新的视图控制器被推送以响应表视图选择,索引路径).您对其他两个问题的答案是正确的,至少在我对iOS上的MVVM的解释中.

视图模型不应该访问您的视图,并且由于MVVM将视图和视图控制器视为一个单元,因此也不应该创建或推送视图控制器.希望有道理

我在GitHub上写了一个使用MVVM的应用程序.你可以看看here.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...