Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Application Coordinator
Search
Alexander Saenko
February 23, 2019
Programming
55
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Application Coordinator
Anton Hudz
Alexander Saenko
February 23, 2019
More Decks by Alexander Saenko
See All by Alexander Saenko
WWDC2020 Summary
alexandersaenko
0
190
Legacy code - methodology
alexandersaenko
0
85
Экологически чистая разработка
alexandersaenko
0
95
Альманах менеджера
alexandersaenko
0
49
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
50
Укрощение нормализированного состояния
alexandersaenko
0
98
Fastlane - App automation done right
alexandersaenko
0
92
Готовим своё хранилище сборок
alexandersaenko
0
55
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
110
Other Decks in Programming
See All in Programming
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
300
XHTMLが残したもの
yosuke_furukawa
PRO
2
680
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
270
Family mrubyの進捗
kishima
1
110
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
130
AIの中の人になってみる
htkym
0
170
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
430
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
190
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
スマート反転とウェブアクセシビリティ
camiha
0
180
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Tell your own story through comics
letsgokoyo
1
1.1k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
Building Flexible Design Systems
yeseniaperezcruz
330
41k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
820
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
270
Speed Design
sergeychernyshev
33
2.1k
Transcript
Application Coordinator Anton Hudz iOS Developer @ Riseapps
Agenda • Common problems • Definition • Responsibilities • How
to use • Sample • Links
Common problems Massive AppDelegate
Common problems Massive View Controllers with too many responsibilities
Definition VC A VC B VC C
Definition VC A VC B VC C Coordinator
Definition Coordinator 1 Coordinator 2 Coordinator 3 Application Coordinator Child
Coordinator 1 Child Coordinator 2
Responsibilities - Coordinator • Navigate controllers • Model mutation
Responsibilities - Controller • Fetch data • Transform it to
present • Display it • Notify coordinator
How to use • New or existing project • Group
your project by flows • Flow -> Coordinator
Sample - AppDelegate class AppDelegate: UIResponder, UIApplicationDelegate { var window:
UIWindow? private let coordinatorFactory = CoordinatorFactory() private lazy var applicationCoordinator: ApplicationCoordinatorOutput = self.make func application(_ application: UIApplication, didFinishLaunchingWithOptions laun configureWindow() return true } } extension AppDelegate { private func configureWindow() { window = UIWindow(frame: UIScreen.main.bounds) applicationCoordinator.start() } private func makeApplicationCoordinator() -> ApplicationCoordinatorOutput { return self.coordinatorFactory.makeApplicationCoordinator(window: window!) } }
Sample - ApplicationCoordinator func start() { window.makeKeyAndVisible() runFlow1() } private
func runFlow1() { let flow1Coordinator = coordinatorFactory.makeFlow1Coordinator(navigationController: flow1Coordinator.finishFlow = { [weak self, weak flow1Coordinator] in self?.removeDependency(flow1Coordinator) self?.runFlow2() } addDependency(flow1Coordinator) flow1Coordinator.start() } private func runFlow2() { let flow2Coordinator = coordinatorFactory.makeFlow2Coordinator(navigationController: flow2Coordinator.finishFlow = { [weak self, weak flow2Coordinator] in self?.removeDependency(flow2Coordinator) self?.runFlow1() } addDependency(flow2Coordinator) flow2Coordinator.start() }
Sample - Flow Coordinator func start() { showB() } }
extension Flow2Coordinator { private func showB() { let controllerBOutput = factory.makeControllerB() controllerBOutput.onFinishFlow = { [weak self] in self?.finishFlow?() } controllerBOutput.onNext = { [weak self] in self?.showC() } router.setRoot(module: controllerBOutput) } private func showC() { let controllerCOutput = factory.makeControllerC() controllerCOutput.onBack = { [weak self] in self?.router.popModule(animated: true) } router.push(controllerCOutput, animated: true, completion: nil) } }
Sample - Controller protocol ControllerBOutput: BaseViewType { var onFinishFlow: (()
-> Void)? { get set } var onNext: (() -> Void)? { get set } } final class ControllerB: BaseViewController, ControllerBOutput { var onFinishFlow: (() -> Void)? var onNext: (() -> Void)? @IBAction private func nextAction() { onNext?() } @IBAction private func finishFlowAction() { onFinishFlow?() } }
Origin links: • http://khanlou.com/2015/10/coordinators-redux/ • https://github.com/AndreyPanov/ApplicationCoordinator My demo project: https://github.com/hudzanton/ApplicationCoordinator
Links
?