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
630
実践 Reactive Cocoa で MVVM
Reactive Cocoa を使用して約1ヶ月で使用した感想です。RACSignalについて理解出来るように図を作って説明しています。
Tomohisa Takaoka
August 04, 2014
Tweet
Share
More Decks by Tomohisa Takaoka
See All by Tomohisa Takaoka
Event Sourcing and Azure Cosmos DB using Sekiban Framework
tomohisa
1
18
自作ライブラリのAspire対応をしてみての感想 Sekiban + Aspire = 簡単イベントソーシング環境構築
tomohisa
2
87
長文から長文を生成するLLMツールをオープンソースで作ってみた。
tomohisa
2
230
「コンパイル時のユニットテスト」導入するとユニットテストを 書かなくてよくなるのか?
tomohisa
10
2.4k
貴重なデータ、捨ててませんか?~ OSSで始めるイベントソーシングのススメ
tomohisa
1
450
VSA - Vertical Slice Architecture について深掘りしてみた
tomohisa
1
320
C#とAzure Cosmos DBで簡単にイベントソーシングを始められるSekibanのデモ
tomohisa
1
250
関数型で表現するイベントソーシングの実装とその教育
tomohisa
1
810
ReactiveCococaのMVVMで綺麗なコードができるのか.pdf
tomohisa
4
3.1k
Other Decks in Technology
See All in Technology
止まらないLinuxシステムを構築する_高信頼性クラスタ入門
koedoyoshida
3
2.3k
Microsoft for Startups Founders Hub_20240429 update
daikikanemitsu
1
2.4k
今日からできる!簡単 .NET 高速化 Tips -2024 edition-
xin9le
7
4.7k
IaCからAWSに入門した初心者が CloudFormationを通して考えた「AWS操作」の使い分け
maimyyym
3
600
自らを知り外と繋がる、日経のエンジニア採用とDevRel活動/devreljp92
nishiuma
1
140
本当のガバクラ基礎
toru_kubota
0
120
家族アルバム みてねにおけるGrafana活用術 / Grafana Meetup Japan Vol.1 LT
isaoshimizu
1
1.1k
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
2.1k
AWS学習者向けにAzureの解説スライドを作成した話
handy
3
210
AWSやJAWS-UGとの出会いを振り返る
yoyoyopg
1
170
Gemini, Google's Large Language Model
glaforge
0
120
[2024/04/23]tbls活用事例 〜 ビューポイントから データベースを整理してみた話 〜
tosite
0
110
Featured
See All Featured
RailsConf 2023
tenderlove
9
570
Ruby is Unlike a Banana
tanoku
96
10k
What the flash - Photography Introduction
edds
64
11k
Designing for Performance
lara
601
67k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
Being A Developer After 40
akosma
67
580k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
1.9k
Git: the NoSQL Database
bkeepers
PRO
423
63k
Testing 201, or: Great Expectations
jmmastey
30
6.4k
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?