Más contenido relacionado La actualidad más candente (20) Similar a MBLTDev15: Egor Tolstoy, Rambler&Co (20) MBLTDev15: Egor Tolstoy, Rambler&Co28. - (void)viewDidLoad {
[super viewDidLoad];
}
[self setupBarWithTitle:@"#mbltdev"];
- (void)setupBarWithTitle:(NSString *)title {
self.navigationItem.title = title;
}
View Presenter Interactor Router
29. - (void)viewDidLoad {
[super viewDidLoad];
}
[self setupBarWithTitle:@"#mbltdev"];
- (void)setupBarWithTitle:(NSString *)title {
self.navigationItem.title = title;
}
View Presenter Interactor Router
Lifecycle
32. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events
BOOL valid = [self.inputValidator
validatePhoneNumber:phoneNumber];
if (valid) {
} else {
}
[self processToNextScreen];
[self showErrorAlertView];
33. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events
if (valid) {
} else {
}
[self processToNextScreen];
[self showErrorAlertView];
BOOL valid = [self.inputValidator
validatePhoneNumber:phoneNumber];
Data validation
34. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events
if (valid) {
} else {
}
[self showErrorAlertView];
Data validation
[self processToNextScreen];
Module Routing
35. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events
if (valid) {
} else {
}
Data validation Module Routing
[self showErrorAlertView];Shows data
36. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if (valid) {
} else {
}
if-else
37. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else
[rootSavingContext performBlock:^{
Message *message =
[Message MR_findFirst];
}];
38. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else
[rootSavingContext performBlock:^{
Message *message =
[Message MR_findFirst];
}];
Data storage
39. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
NSURLSessionDataTask *dataTask =
[self.session dataTaskWithRequest:request];
[dataTask resume];
40. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
NSURLSessionDataTask *dataTask =
[self.session dataTaskWithRequest:request];
[dataTask resume];
Networking
41. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender {
segue.destinationViewController.inputData =
@"inputData";
}
42. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender {
segue.destinationViewController.inputData =
@"inputData";
}
Segues
43. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = [tableView dequeueReusableCell];
[cell setupWithObject:cellObject];
}
Segues
44. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = [tableView dequeueReusableCell];
[cell setupWithObject:cellObject];
}
Segues
Table DataSource
45. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
- (void)panGestureRecognizerDidChangeState:(id)sender {
CGPoint panPoint = [sender translationInView:self.view];
self.view.frame = CGRectMake(panPoint.x,
self.view.frame.origin.y,
self.view.frame.size.width,
self.view.frame.size.height);
}
Segues
Table DataSource
46. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
- (void)panGestureRecognizerDidChangeState:(id)sender {
CGPoint panPoint = [sender translationInView:self.view];
self.view.frame = CGRectMake(panPoint.x,
self.view.frame.origin.y,
self.view.frame.size.width,
self.view.frame.size.height);
}
Simple gestures
Segues
Table DataSource
47. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
Simple gestures
if (panPoint.x > 100.0f) {
}
[self showSideMenu];
Segues
Table DataSource
48. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
Simple gestures
if (panPoint.x > 100.0f) {
}
[self showSideMenu];Side Menu
Segues
Table DataSource
49. View Presenter Interactor Router
Lifecycle
Navbar Setup
Handles events Data validation Module Routing
Shows data
if-else Data storage
Networking
Segues
Table DataSource
Simple gestures
Side Menu
if (panPoint.x > 100.0f) {
}
Complex gestures
70. pod 'MyApp/Core', '1.2.2'
pod 'MyApp/Modules/CalendarModule', '1.5'
pod 'MyApp/Modules/SettingsModule', '1.0.1'
pod 'SharedModules/Authorization', '2.3.4'
72. • VIPER увеличивает тестируемость приложения,
• VIPER увеличивает модульность приложения,
• VIPER делает нашу жизнь немного прекраснее.
75. Open Source
• Рамблер.Конференции - приложение
• Generamba - генератор
• VIPER McFlurry - библиотека
• The Book of VIPER - сборник статей
https://github.com/rambler-ios