Использование встроенного свойства typhoon в другом определении

У меня проблема с картой 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, которые я пытаюсь ввести, равны нулю.

One Solution collect form web for “Использование встроенного свойства typhoon в другом определении”

Вы правы, сборка может быть либо активной, либо неактивной, поэтому она не предназначена для того, чтобы делать то, что вы хотели бы сделать. Поэтому для вашего прецедента используется специальная функция 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]; }]; }]; } 

Соответствует ли это вашим потребностям? Возможно, вы можете объединить это с заводскими определениями .

  • Невозможно ввести свойство, селектор не найден
  • Тайфун и ограничение @objc в протоколах
  • Typhoon - использование одного компонента на всей территории приложения
  • Быстрое вложение свойств компонента Typhoon не работает
  • Тайфун не вводит имущество (без раскадровки)
  • Ошибка Swift TyphoonBlockComponentFactory в XCTest
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.