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
実践 Reactive Cocoa で MVVM
Search
Tomohisa Takaoka
August 04, 2014
Technology
2
770
実践 Reactive Cocoa で MVVM
Reactive Cocoa を使用して約1ヶ月で使用した感想です。RACSignalについて理解出来るように図を作って説明しています。
Tomohisa Takaoka
August 04, 2014
Tweet
Share
More Decks by Tomohisa Takaoka
See All by Tomohisa Takaoka
dnx で実行できるコマンド、作ってみました
tomohisa
0
62
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
2
6.3k
Azure Cognitive Services / Speech で話者分離の音声文字起こしをする / Speaker-Diarized Transcription with Azure Cognitive Services Speech
tomohisa
0
170
DCB版のSekibanのコード、動作、ベンチマークのデモ/dcb sekiban code and benchmark
tomohisa
0
31
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
330
Distributed applications made with Microsoft Orleans (& Dapr) and Event Sourcing using Sekiban
tomohisa
0
67
MCPを使ってイベントソーシングのAIコーディングを効率化する / Streamlining Event Sourcing AI Coding with MCP
tomohisa
0
250
AIコーディング新時代を生き残るための試行錯誤 / AI Coding Survival Guide
tomohisa
9
14k
イベントソーシングとAIの親和性ー物語とLLMに理解できるデータ
tomohisa
1
310
Other Decks in Technology
See All in Technology
重厚長大企業で、顧客価値をスケールさせるためのプロダクトづくりとプロダクト開発チームづくりの裏側 / Developers X Summit 2025
mongolyy
0
160
プロダクト負債と歩む持続可能なサービスを育てるための挑戦
sansantech
PRO
1
670
レガシーシステム刷新における TypeSpec スキーマ駆動開発のすゝめ
tsukuha
1
440
『星の世界の地図の話: Google Sky MapをAI Agentでよみがえらせる』 - Google Developers DevFest Tokyo 2025
taniiicom
0
110
機密情報の漏洩を防げ! Webフロントエンド開発で意識すべき漏洩パターンとその対策
mizdra
PRO
14
5.4k
Android Studio Otter の最新 Gemini 機能 / Latest Gemini features in Android Studio Otter
yanzm
0
110
ローカルLLM基礎知識 / local LLM basics 2025
kishida
21
6k
DDD x Microservice Architecture : Findy Architecture Conf 2025
syobochim
12
3.3k
その意思決定、まだ続けるんですか? ~痛みを超えて未来を作る、AI時代の撤退とピボットの技術~
applism118
33
20k
Axon Frameworkのイベントストアを独自拡張した話
zozotech
PRO
0
220
明日から真似してOk!NOT A HOTELで実践している入社手続きの自動化
nkajihara
1
870
SRE視点で振り返るメルカリのアーキテクチャ変遷と普遍的な考え
foostan
2
440
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Navigating Team Friction
lara
190
16k
A Tale of Four Properties
chriscoyier
162
23k
Typedesign – Prime Four
hannesfritz
42
2.9k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Docker and Python
trallard
46
3.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
680
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Transcript
実践 Reacive Cocoa でMVVM @tomohisa Tomohisa Takaoka 2014.08.04 Swift&Obj-C&Xcode開発周り勉強会 - 0x03
[link] http://swifuku.connpass.com/event/7455/
None
डୗ։ൃ ʴ ΤϯλʔϓϥΠζ J-Tech Creations, Inc www.jtechs.com
前回発表 約1ヶ月新規プロダ クトに使用してみた!
ReactiveCocoaͱʁ Function Reactive Programming (FRP) ΛObjective-CͰ࣮ݱ͢ΔͨΊͷϑϨʔϜϫʔΫ https://github.com/ReactiveCocoa/ReactiveCocoa
関西のRAC勉強会! ここに必要な情報はほぼある! [link] http:// ninjinkun.hatenablog.com/entry/ 2014/08/03/204348 ReactiveCocoa勉強会関西を開催しました #rac_kansai - ninjinkun's
diary
MVC MVVM ViewControllerɺେ͖ͳҙຯͰͷ VʹؚΉ
• 分からないことが最初多い • 他の人が入りにくい(かも) • 謎挙動することが(たまに)ある cons
Pros • viewControllerがスッキリ • viewModelで複雑なことをやりやすい • 疎結合が綺麗に実現される • プログラムするのが楽しい(綺麗に出 来るので)
• 学習曲線が緩やかだけど、マスターす れば綺麗にはやく出来そう
Reacive Cocoa + MVVM 概観
ReactiveCocoa ≒ RACSignal ※特にRAC3.0以降 おおざっぱに言うと…
Signal subscribe sendError: sendCompleted: Subscriber sendNext: value ReactiveCocoa RACSignal のライフサイクル
Signal subscribe sendError: sendCompleted: Subscriber ReactiveCocoa RACSignal のライフサイクル sendNext: value
sendNext:(id)value はcomplete前は何度でも送れる
X Signal subscribe sendError: sendCompleted: Subscriber sendNext: value X ReactiveCocoa
RACSignal のライフサイクル subscribe前のsignalは届かない completed, error後はsignalのイン スタンスが無くなるのでsendNext: 出来ない。
Signalを作成する
Signalを購読(subscribe)する
Signalから値を変更する 2つの例は同じことをしている。 RAC(object, property) = RACSignal でnextの値をpropertyに 継続的に代入出来る
ReactiveCocoa がすごいのは ここから!
• sendNextの結果を受け取って次の処理 • Signalを連結して一つの処理に • sendNextにフィルタをかける • Signalのマージ などの面倒な処理を綺麗に書ける!
@matuyuji さんのスライドが良かった!
filter:
filter: signal subscriber sendNext:value filter: return NO; sendNext:value filter: return
YES; sendNext:value
flattenMap:
flattenMap: signal subscriber sendNext:value flattenMap: sendNext:value sendError:
flattenMap:のcompleted signal subscriber sendNext:value flattenMap: sendNext:value sendCompleted まだ、引き継いだsignalが動いているの で、subscriberにはcompletedを送らない 引き継いだsignalも
終わっているので completedを送る 基本的に意図した通 りに動くが結構めん どうな仕組み
MVVM
基本的には、 •VCに対応してViewModelを作る •ステータスなどはVMに持つ •VCはVMにバインドさせるか、単 純な表示機能だけ作る •Modelとも出来るだけ疎結合に し、入力中のデータは確定され るまでModelに反映させない
UITableViewはセルを再利用するのでバイン ドに向いていない viewModelに配列でデータを持たせて、 reloadする時にsendNext:が呼ばれる signalをviewModelに持たせて、あと は普通にセルを作る
takeUntil: のシグナルで、購読期間を指定する cellが再利用の準備に入ったら (再描画前を含む) 一度購読を終了することによって二重購読 などを防ぐ
RACCommand 複数回発生して、パラメーターをと るSignalを作成出来る。enabledを設 定することによって、実行の制限も かけられる。 基本的にはsignal UIButtonなどと連結出来るのが便利
RACScheduler UI変更がある時にメインスレッドでsignal を受け取ることを指定出来る。
時間があれば live coding
non-RAC RAC まとめ 習得に時間かかるけどメンテナンス性の良 いものができる
綺麗に出来た時に楽しい! すこしづつ組み込んでいったら 良いと思う!
おまけ#1 • ίʔσΟϯάϑΥϯτ • http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/rictydiminished.html
None
おまけ#2 Xcode Package Manager ϓϥάΠϯͷཧ http://alcatraz.io
CocoaPods マネージャー便利! コマンドたたく必要なし!
ϑΥϯταΠζΛ ⌘ʴ ⌘ʔ Ͱม͑ΒΕΔ
None
None
UIColor補助
None
[subscriber sendNext:@“Thank you!”]; ! ! //Any Question?