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
RxSwift-MVVM
Search
chocovayashi
July 24, 2018
Programming
0
120
RxSwift-MVVM
chocovayashi
July 24, 2018
Tweet
Share
More Decks by chocovayashi
See All by chocovayashi
iosの新機能軽く使ってみた
chocovayashi
0
70
Other Decks in Programming
See All in Programming
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
20
3.8k
PicoRuby on Rails
makicamel
2
120
WebViewの現在地 - SwiftUI時代のWebKit - / The Current State Of WebView
marcy731
0
110
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
690
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
1.7k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
50
32k
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
170
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
1
330
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
880
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
0
230
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
370
Featured
See All Featured
Six Lessons from altMBA
skipperchong
28
3.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
680
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Bash Introduction
62gerente
614
210k
GraphQLとの向き合い方2022年版
quramy
49
14k
Fireside Chat
paigeccino
37
3.5k
Code Reviewing Like a Champion
maltzj
524
40k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Being A Developer After 40
akosma
90
590k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
A Modern Web Designer's Workflow
chriscoyier
694
190k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Transcript
RxSwiftを使った iOSアプリ開発の設計 @chocovayashi
今日のゴール RxSwiftを使ってMVVMの 実装ができるようになる
目次 • RxSwiftの説明 ◦ What is RxSwift ◦ When use
RxSwift ◦ How to use RxSwift ◦ RxSwift導入よる利点 • 実際に実装してみよう ◦ Rx入れないMVVM ◦ Rx入れるMVVM • まとめ
目次 • RxSwiftの説明 ◦ What is RxSwift ◦ When use
RxSwift ◦ How to use RxSwift ◦ RxSwift導入よる利点 • 実際に実装してみよう ◦ Rx入れないMVVM ◦ Rx入れるMVVM • まとめ
What is RxSwift RxSwift = Rx + Swift Rx =
Reactive Extensions Reactive Extensionsとは・・ イベントストリームを抽象化するライブラリ
時間 【特徴】 • 値、エラー、完了の3種類のイベントが流れる。 • エラー、完了が流れると、それ以降イベントは流れない。 • イベントをlistenすることをsubscribeすると言う。 イベントが流れてくる川のようなイメージ What
is RxSwift ストリーム
When use RxSwift UIイベント 通信処理 ボタンのタップや、TextFieldの入力、 TableViewへのデータのbindなど HTTP Requestを送信する場合など
How to use RxSwift (UIButton) tapイベント
入力イベント How to use RxSwift (UITextField)
2 5 8 変更イベント How to use RxSwift (KVO)
RxSwift導入による利点 非同期処理が簡単に実現可能
可読性の向上 RxSwift使わない場合 RxSwift使わない場合 メソッドの目移りが なくなる RxSwift導入による利点
イベントの加工や結合などが簡単にできる 1 2 3 2 4 6 map { $0
* 2 } 1 2 3 6 reduce(0) { $0 + $1 } RxSwift導入による利点
1 2 3 ストリームの結合などが簡単にできる 1 2 3 4 5 6
(例) merge observable1 observable2 4 5 6 output RxSwift導入による利点
1 2 3 ストリームの結合などが簡単にできる 1 2 3 4 5 6
(例) concat observable1 observable2 4 5 6 output RxSwift導入による利点
目次 • RxSwiftの説明 ◦ What is RxSwift ◦ When use
RxSwift ◦ How to use RxSwift ◦ RxSwift導入よる利点 • 実際に実装してみよう ◦ Rx入れないMVVM ◦ Rx入れるMVVM • まとめ
今回つくるもの Github APIにアクセスして その内容をViewに表示するア プリ
MVVM作成(共通) Entityの定義 swift4から導入された、 codableを用いて、CodingKeysに jsonのkeyを書くことにより 自動で構造体にマッピング される。
MVVM作成(共通) Requestの定義
Rxを入れないMVVM ライブラリを使わないMVVM • willSet / didSetを用いるパターン • Notificationを使うパターン 動的に監視を追加、削除が可能なので 今回はNotificationを利用
Rxを入れないMVVM Notification.Nameの拡張 keyを通知送信側と受信側で直接書くのは危ういので、 Extentionを用いて Notification.Name の拡張をすべき
Modelの実装 notificationの送信 Rxを入れないMVVM
ViewModelの実装 notificationの受け取り準備 notificationの解放 Rxを入れないMVVM
KVOのデメリット • 毎回解放するのが面倒 • Notification.Nameの拡張が大量に必要となる • 可読性が低い Rxを入れないMVVM
RxSwiftとAPIKitを連携するために、Sessionを拡張 Rxを入れるMVVM
Model Rxを入れるMVVM
ViewModel 取得したEntityを変数にbind VCからsubscribeされるもの Rxを入れるMVVM
ViewController VMでbindされたentityをlistenする VMを通じてデータを取得する Rxを入れるMVVM
RxSwiftのメリット • データの流れをシンプルに書ける • 可読性が高い RxSwiftのデメリット • 学習コストが高い Rxを入れるMVVM
まとめ RxSwiftを使うとシンプルにMVVMの 非同期処理を実現できる。 けど、学習コストが高い( ´∀`) 導入するかはチームで要相談