MVVM模式和Storyboard iOS

Tob*_*rys 6 design-patterns mvvm ios

当项目包含Storyboard时,有人可以解释我如何实现MVVM模式吗?

在许多例子中,我看到我必须使用.xib文件.而init ViewControllers像这样:

-(instancetype)initWithModelView:(ViewModel *)viewModel{

    self = [super init];

    if(self){

        _viewModel = viewModel;
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

但是故事板我不能init viewControllers,故事板为我做了.我应该使用属性吗?

UINavigationController *nav = (UINavigationController *)[self.viewControllers objectAtIndex:0];
HomeViewController *hvc = (HomeViewController *)[nav.viewControllers objectAtIndex:0];
hvc.viewModel = viewModel;
Run Code Online (Sandbox Code Playgroud)

自我是UITabBarController.

Ant*_*ton 8

您可以viewModelprepareForSegue:sender:您的方法中初始化属性UIViewController

这是Ash Furrow的一个很棒的样本MVVM应用程序C-41的链接

viewModel该应用程序中的初始化示例:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        ASHDetailViewController *viewController = segue.destinationViewController;
        viewController.viewModel = [self.viewModel detailViewModelForIndexPath:indexPath];
    } else if ([[segue identifier] isEqualToString:@"editRecipe"]) {
        ASHEditRecipeViewController *viewController = (ASHEditRecipeViewController *)[segue.destinationViewController topViewController];
        viewController.viewModel = [self.viewModel editViewModelForNewRecipe];
    }
}
Run Code Online (Sandbox Code Playgroud)