$30 off During Our Annual Pro Sale. View Details »
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
140
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
5
20k
Azure Cognitive Services / Speech で話者分離の音声文字起こしをする / Speaker-Diarized Transcription with Azure Cognitive Services Speech
tomohisa
0
190
DCB版のSekibanのコード、動作、ベンチマークのデモ/dcb sekiban code and benchmark
tomohisa
0
41
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
350
Distributed applications made with Microsoft Orleans (& Dapr) and Event Sourcing using Sekiban
tomohisa
0
72
MCPを使ってイベントソーシングのAIコーディングを効率化する / Streamlining Event Sourcing AI Coding with MCP
tomohisa
0
270
AIコーディング新時代を生き残るための試行錯誤 / AI Coding Survival Guide
tomohisa
9
14k
イベントソーシングとAIの親和性ー物語とLLMに理解できるデータ
tomohisa
1
320
Other Decks in Technology
See All in Technology
AWSセキュリティアップデートとAWSを育てる話
cmusudakeisuke
0
200
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
110
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
680
ログ管理の新たな可能性?CloudWatchの新機能をご紹介
ikumi_ono
1
620
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
230
Playwrightのソースコードに見る、自動テストを自動で書く技術
yusukeiwaki
13
5.2k
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
技術以外の世界に『越境』しエンジニアとして進化を遂げる 〜Kotlinへの愛とDevHRとしての挑戦を添えて〜
subroh0508
1
430
30分であなたをOmniのファンにしてみせます~分析画面のクリック操作をそのままコード化できるAI-ReadyなBIツール~
sagara
0
110
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
1.2k
ML PM Talk #1 - ML PMの分類に関する考察
lycorptech_jp
PRO
1
780
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Building an army of robots
kneath
306
46k
Designing for Performance
lara
610
69k
RailsConf 2023
tenderlove
30
1.3k
Faster Mobile Websites
deanohume
310
31k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Optimizing for Happiness
mojombo
379
70k
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?