Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
81
Экологически чистая разработка
alexandersaenko
0
94
Альманах менеджера
alexandersaenko
0
48
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
50
Укрощение нормализированного состояния
alexandersaenko
0
97
Fastlane - App automation done right
alexandersaenko
0
92
Готовим своё хранилище сборок
alexandersaenko
0
50
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
110
Other Decks in Programming
See All in Programming
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
700
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
Claude Team Plan導入・ガイド
tk3fftk
0
220
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
100
共通化で考えるべきは、実装より公開する型だった
codeegg
0
270
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
160
数百円から始めるRuby電子工作
tarosay
0
100
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
AIエージェントで 変わるAndroid開発環境
takahirom
2
710
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
Into the Great Unknown - MozCon
thekraken
41
2.6k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
What's in a price? How to price your products and services
michaelherold
247
13k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
240
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Practical Orchestrator
shlominoach
191
11k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
260
Fireside Chat
paigeccino
42
4k
Are puppies a ranking factor?
jonoalderson
1
3.7k
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
?