Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVVM模式和故事板iOS_Ios_Design Patterns_Mvvm - Fatal编程技术网

MVVM模式和故事板iOS

MVVM模式和故事板iOS,ios,design-patterns,mvvm,Ios,Design Patterns,Mvvm,当项目包含故事板时,有人能告诉我如何实现MVVM模式吗 在许多示例中,我看到必须使用.xib文件。和initViewControllers如下所示: -(instancetype)initWithModelView:(ViewModel *)viewModel{ self = [super init]; if(self){ _viewModel = viewModel; } return self; } 但是有了故事板,我无法initvi

当项目包含故事板时,有人能告诉我如何实现MVVM模式吗

在许多示例中,我看到必须使用
.xib
文件。和
init
ViewControllers
如下所示:

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

    self = [super init];

    if(self){

        _viewModel = viewModel;
    }

    return self;
}
但是有了故事板,我无法
init
viewControllers
,故事板可以帮我做到这一点。 我应该改用属性吗

i、 e


self是
UITabBarController

您可以在
UIViewController的
prepareforsgue:sender:
方法中初始化
viewModel
属性

下面是一个指向MVVM应用程序示例的链接

该应用程序中的
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];
    }
}

隐马尔可夫模型。。。这是否意味着在Swift中,视图控制器的
viewModel
属性需要隐式展开?我想是这样的。下面是swift中MVVM应用程序的真实示例(带有故事板):。它们在视图控制器内创建视图模型(如
lazy var
),但它们通过显式展开的选项在
prepareforsgue
中提供参数。错误。。。通过隐式展开的选项。
- (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];
    }
}