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.
您可以viewModel在prepareForSegue: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)