TestsTested | ✗ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Oct 2016 |
Maintained by Andrey Zarembo, [etolstoy].
VIPER McFlurry is a modern framework for implementing VIPER architecture in iOS application. It offers several tools and components that help either start new projects with VIPER or move from MVC.
This example works only for Module with
UIViewController
as View. However, it's possible to use this approach even withUIView
andUITableViewCell
acting as View.
RamblerViperModuleInput
:@protocol SomeModuleInput <RamblerViperModuleInput>
- (void)moduleConfigurationMethod;
@end
[[self.transitionHandler openModuleUsingSegue:SegueIdentifier]
thenChainUsingBlock:^id<RamblerViperModuleOutput>(id<SomeModuleInput> moduleInput) {
[moduleInput moduleConfigurationMethod];
return nil;
}];
RamblerViperModuleOutput
:@protocol SomeModuleOutput <RamblerViperModuleOutput>
- (void)moduleConfigurationMethod;
@end
- (void)setModuleOutput:(id<RamblerViperModuleOutput>)moduleOutput;
[[self.transitionHandler openModuleUsingSegue:SegueIdentifier]
thenChainUsingBlock:^id<RamblerViperModuleOutput>(id<SomeModuleInput> moduleInput) {
[moduleInput moduleConfigurationMethod];
return sourceRouterPresenter; // Return of module output
}];
Module factory can be replaced with segues for most cases. Except you need to create complex module or nontrivial module instantiation logic.
RamblerViperModuleFactory
object as module fabric with Typhoon.initWithStoryboard:andRestorationId:
- openModuleUsingFactory:withTransitionBlock:
. [[self.transitionHandler openModuleUsingFactory:self.betaModuleFactory
withTransitionBlock:^(id <RamblerViperModuleTransitionHandlerProtocol> sourceModuleTransitionHandler,
id <RamblerViperModuleTransitionHandlerProtocol> destinationModuleTransitionHandler) {
UIViewController *sourceViewController = (id) sourceModuleTransitionHandler;
UIViewController *destinationViewController = (id) destinationModuleTransitionHandler;
[sourceViewController.navigationController pushViewController:destinationViewController
animated:YES];
}] thenChainUsingBlock:^id<RamblerViperModuleOutput>(id<RamblerModuleBetaInput> moduleInput) {
[moduleInput configureWithExampleString:exampleString];
return nil;
}];
Add to podfile
pod "ViperMcFlurry"
MIT
Rambler&Co team: