Skip to content

Instantly share code, notes, and snippets.

@toshinarin
Created October 20, 2014 14:33
Show Gist options
  • Save toshinarin/957898bb15847f747a16 to your computer and use it in GitHub Desktop.
Save toshinarin/957898bb15847f747a16 to your computer and use it in GitHub Desktop.

ReactiveCocoa Tokyo

はじめてのReactiveCocoa

リアクティブプログラミング、MVVMって?

  • 時間とともに変化する値の関係性を記述する。
  • Model, View, ViewModel
  • Model - ViewModel - View/ViewController
  • VMとVをReactiveCocoaでBindingすると幸せになれる

メリット

  • テストが書きやすい
  • 一時的に使う変数がなくなった

デメリット

  • 難しい。
    • 慣れるしかない
    • まずはViewModelへのデータバインディングから始めるとよいかも。
  • Signalを連鎖し過ぎると読みにくくなる。

まとめ

FrilでのReacitiveCocoa事例

なぜ今ReactiveCocoaか

  • アプリが非常に多くの状態と非同期処理を持っている
  • Modelの更新、通知、Viewの更新
    • delegateメソッド or NSNotificationCenter
    • FrilでのLike
  • 利用者
    • Github, Netflix (サーバー)
    • Chatwork, Freee, Fabric

FrilのRAC利用ポリシー

  • RACにロックインされるような実装は避ける
    • RACオブジェクトをモジュール間のインタフェースに使用しない
  • 用途
    • テキストのValidation
    • Delegateラッパー
    • KVOラッパー

ゆるいMVVM

  • とにかくMutableなものはVMにあつめる。JSONから生成されたNSObjectはImmutableに。
  • VMに対するユニットテストを書く
  • RACはbindのみに使う
  • タイムラインAPI + 商品詳細API = 商品ViewModel
  • 商品ViewModelをRACでbind
    • 商品ViewModelを更新する
    • Viewには自動的に状態が反映される
  • 商品JSONの集約…

Reactive Extensions

  • MicrosoftによるRPの実装の一つ
  • RACはその流れに沿ってる

FRP

  • うかつにFRPと言わないほうがよい

freee社でのReactiveCocoa活用例

導入

  • コアライブラリとして使っている。
  • 新規開発だからそうできた。
  • 1ヶ月でアプリを出したい。
  • ただし変更に強い設計にしたい
  • サービスの特徴
    • ユーザーの入力に応じていろいろな表示を更新することが多い

ViewModel

  • UIViewCOntrollerの状態管理
  • APIリクエストの発行
  • Model(s)の管理

なぜReactiveCocoa

  • octokit.objc
  • @ikesyo さんのQiitaに資料がまとまっている

ロックイン

  • Pros

    • MVVMの各今ポーネコードが統一される
    • Signal設計が楽しい
    • NSNotification#rac_addObserverForNameとかUITextField#rac_textSignalが便利
  • Cons

    • SubscriberやRACSignalが難しい
    • ...
  • RACObserveでKVOの置換えからやるとよいのでは。

var RAC3 = ReactiveCocoa + Swift

LT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment