Slide 1

Slide 1 text

実践 Reacive Cocoa でMVVM @tomohisa Tomohisa Takaoka 2014.08.04 Swift&Obj-C&Xcode開発周り勉強会 - 0x03 [link] http://swifuku.connpass.com/event/7455/

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

डୗ։ൃ ʴ ΤϯλʔϓϥΠζ J-Tech Creations, Inc www.jtechs.com

Slide 4

Slide 4 text

前回発表 約1ヶ月新規プロダ クトに使用してみた!

Slide 5

Slide 5 text

ReactiveCocoaͱ͸ʁ Function Reactive Programming (FRP) ΛObjective-CͰ࣮ݱ͢ΔͨΊͷϑϨʔϜϫʔΫ https://github.com/ReactiveCocoa/ReactiveCocoa

Slide 6

Slide 6 text

関西のRAC勉強会! ここに必要な情報はほぼある! [link] http:// ninjinkun.hatenablog.com/entry/ 2014/08/03/204348 ReactiveCocoa勉強会関西を開催しました #rac_kansai - ninjinkun's diary

Slide 7

Slide 7 text

MVC MVVM ViewController͸ɺେ͖ͳҙຯͰͷ VʹؚΉ

Slide 8

Slide 8 text

• 分からないことが最初多い • 他の人が入りにくい(かも) • 謎挙動することが(たまに)ある cons

Slide 9

Slide 9 text

Pros • viewControllerがスッキリ • viewModelで複雑なことをやりやすい • 疎結合が綺麗に実現される • プログラムするのが楽しい(綺麗に出 来るので) • 学習曲線が緩やかだけど、マスターす れば綺麗にはやく出来そう

Slide 10

Slide 10 text

Reacive Cocoa + MVVM 概観

Slide 11

Slide 11 text

ReactiveCocoa ≒ RACSignal ※特にRAC3.0以降 おおざっぱに言うと…

Slide 12

Slide 12 text

Signal subscribe sendError: sendCompleted: Subscriber sendNext: value ReactiveCocoa RACSignal のライフサイクル

Slide 13

Slide 13 text

Signal subscribe sendError: sendCompleted: Subscriber ReactiveCocoa RACSignal のライフサイクル sendNext: value sendNext:(id)value はcomplete前は何度でも送れる

Slide 14

Slide 14 text

X Signal subscribe sendError: sendCompleted: Subscriber sendNext: value X ReactiveCocoa RACSignal のライフサイクル subscribe前のsignalは届かない completed, error後はsignalのイン スタンスが無くなるのでsendNext: 出来ない。

Slide 15

Slide 15 text

Signalを作成する

Slide 16

Slide 16 text

Signalを購読(subscribe)する

Slide 17

Slide 17 text

Signalから値を変更する 2つの例は同じことをしている。 RAC(object, property) = RACSignal でnextの値をpropertyに 継続的に代入出来る

Slide 18

Slide 18 text

ReactiveCocoa がすごいのは ここから!

Slide 19

Slide 19 text

• sendNextの結果を受け取って次の処理 • Signalを連結して一つの処理に • sendNextにフィルタをかける • Signalのマージ などの面倒な処理を綺麗に書ける!

Slide 20

Slide 20 text

@matuyuji さんのスライドが良かった!

Slide 21

Slide 21 text

filter:

Slide 22

Slide 22 text

filter: signal subscriber sendNext:value filter: return NO; sendNext:value filter: return YES; sendNext:value

Slide 23

Slide 23 text

flattenMap:

Slide 24

Slide 24 text

flattenMap: signal subscriber sendNext:value flattenMap: sendNext:value sendError:

Slide 25

Slide 25 text

flattenMap:のcompleted signal subscriber sendNext:value flattenMap: sendNext:value sendCompleted まだ、引き継いだsignalが動いているの で、subscriberにはcompletedを送らない 引き継いだsignalも 終わっているので completedを送る 基本的に意図した通 りに動くが結構めん どうな仕組み

Slide 26

Slide 26 text

MVVM

Slide 27

Slide 27 text

基本的には、 •VCに対応してViewModelを作る •ステータスなどはVMに持つ •VCはVMにバインドさせるか、単 純な表示機能だけ作る •Modelとも出来るだけ疎結合に し、入力中のデータは確定され るまでModelに反映させない

Slide 28

Slide 28 text

UITableViewはセルを再利用するのでバイン ドに向いていない viewModelに配列でデータを持たせて、 reloadする時にsendNext:が呼ばれる signalをviewModelに持たせて、あと は普通にセルを作る

Slide 29

Slide 29 text

takeUntil: のシグナルで、購読期間を指定する cellが再利用の準備に入ったら (再描画前を含む) 一度購読を終了することによって二重購読 などを防ぐ

Slide 30

Slide 30 text

RACCommand 複数回発生して、パラメーターをと るSignalを作成出来る。enabledを設 定することによって、実行の制限も かけられる。 基本的にはsignal UIButtonなどと連結出来るのが便利

Slide 31

Slide 31 text

RACScheduler UI変更がある時にメインスレッドでsignal を受け取ることを指定出来る。

Slide 32

Slide 32 text

時間があれば live coding

Slide 33

Slide 33 text

non-RAC RAC まとめ 習得に時間かかるけどメンテナンス性の良 いものができる

Slide 34

Slide 34 text

綺麗に出来た時に楽しい! すこしづつ組み込んでいったら 良いと思う!

Slide 35

Slide 35 text

おまけ#1 • ίʔσΟϯάϑΥϯτ • http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/rictydiminished.html

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

おまけ#2 Xcode Package Manager ϓϥάΠϯͷ؅ཧ http://alcatraz.io

Slide 38

Slide 38 text

CocoaPods マネージャー便利! コマンドたたく必要なし!

Slide 39

Slide 39 text

ϑΥϯταΠζΛ ⌘ʴ ⌘ʔ Ͱม͑ΒΕΔ

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

UIColor補助

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

[subscriber sendNext:@“Thank you!”]; ! ! //Any Question?