我遇到Typhoon框架问题。我有构建我的数据模型的程序集:
- (DataModel *)dataModel {
return [TyphoonDefinition withClass:[DataModel class]];
}
现在我想组装我的所有视图模型。在一个定义中,我需要确定用户是否已设置密码。该信息存储在数据模型中。所以我的定义如下:
- (id)passViewModel {
return [TyphoonDefinition withClass:[PasscodeViewModel class] configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(initwithType:) parameters:^(TyphoonMethod *initializer) {
NSNumber *type = [self.modelAssembly dataModel] isPasscodeSet ? @(TypeReturning) : @(TypeNew);
[initializer injectParameterWith:type];
}];
}];
}
问题在于,当激活定义时,dataModel是TyphoonDefinition,而不是DataModel。
是否有任何方法可以让我获得dataModel的属性值?
编辑:
根据下面的答案,我的装配现在看起来像这样:
- (UIViewController *)passcodeViewController {
return [TyphoonDefinition withOption:[(id)[self.modelAssembly dataModel] property:@selector(isPasscodeSet)]
yes:[self passcodeViewController:@(TypeReturning)]
no:[self passcodeViewController:@(TypeNew)]];
}
- (UIViewController *)passcodeViewController:(NSNumber *)entryType {
return [TyphoonDefinition withClass:[PasscodeViewController class] configuration:^(TyphoonDefinition *definition) {
[definition injectProperty:@selector(entryType) with:entryType];
[definition injectProperty:@selector(viewModel) with:[self.viewModelsAssembly passcodeViewModel:entryType]];
}];
}
我正在使用" passcodeViewController"作为故事板中的台风键。不幸的是,我尝试注入的viewModel和entryType是nil。
答案 0 :(得分:2)
你是对的,一个程序集可以是活动的也可以是非活动的,因此它不是为了做你想做的事情而设计的。因此,您的用例名为Typhoon Option Matcher。
您可以根据(激活的)程序集中的另一个对象的开头或运行时参数返回一个或另一个定义。示例:
- (id)passViewModel
{
return [TyphoonDefinition withOption:[(id)[self.modelAssembly dataModel]
property:@selector(isPasscodeSet)]
yes:[self passViewModelWithType:@(TypeReturning)]
no:[self passViewModelWithType:@(TypeNew)]];
}
- (id)passViewModelWithType:(NSNumber *)type
{
return [TyphoonDefinition withClass:[PasscodeViewModel class]
configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(initwithType:)
parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:type];
}];
}];
}
这是否符合您的需求?也许你可以将它与factory definitions结合起来。