Как вы передаете данные от одного ViewController к другому с помощью TyphoonStoryboard?
У меня есть простейшее из возможных приложений на основе раскадровки.
У нас есть UINavigationController
и просмотр контроллеров A и B.
A имеет текстовое поле, в которое пользователь должен ввести свое имя. Когда пользователь касается кнопки, он переходит в B, показывая "Привет, [ИМЯ]!"
Как передать введенное пользователем имя от A до B с помощью Typhoon?
С Тайфуном, я предполагаю, что это позволяет мне избежать использования -prepareForSegue:sender:
Это просто зло с точки зрения DI, потому что оно требует связи между тем, что иначе было бы совершенно не связано View Controllers. (например viewControllerB.nameToDisplay = self.textField.text;
)
1 ответ
Приятной особенностью Typhoon является возможность использовать ваши сборки в качестве интерфейса фабрики, который смешивает статические зависимости и зависимости времени выполнения, что позволяет избежать создания собственной фабрики. Эта функция называется аргументами времени выполнения. Однако поскольку раскадровки используются для генерации контроллеров представления, использовать их будет невозможно:
- Аргументы времени выполнения, так как интерфейс раскадровки не имеет этого понятия.
- Внедрение инициализатора, поскольку VC испускаются из использования раскадровки
initWithCoder
Что еще вы можете сделать, это создать изменяемый объект модели в вашей сборке с областью действия TyphoonScopeWeakSingleton
- (Person *)storyboardModel
{
return [TyphoonDefinition withClass:[Person class]
configuration:^(TyphoonDefinition *definition) {
definition.scope = TyphoonScopeWeakSingleton;
}];
}
Затем вы можете вставить это в контроллер верхнего вида и все последующие дочерние элементы в этом стеке. Когда этот стек в конечном итоге вытолкнут, объект модели также будет очищен.
Так как созданные Storyboard контроллеры представлений лучше всего работают только с зависимостями свойств, вы можете использовать этот подход вместе с автоматическими макросами Typhoon (все еще частными, но доступными на главном). Это экономит время создания правил сборки сборки и правил подключения:
@interface INFWelcomeController : UIViewController <INFWelcomeViewDelegate>
@property (nonatomic, strong) InjectedClass(Person) model;
@property (nonatomic, strong) InjectedProtocol(WebClient) client;
@end
Авто-проводка также будет доступна для интеграционных тестов.