Как вы передаете данные от одного ViewController к другому с помощью TyphoonStoryboard?

У меня есть простейшее из возможных приложений на основе раскадровки.

Screenie

У нас есть 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

Авто-проводка также будет доступна для интеграционных тестов.

Другие вопросы по тегам