Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift 2.0でRxSwift、ReactKit、ReactiveCocoaを使ってみた

Swift 2.0でRxSwift、ReactKit、ReactiveCocoaを使ってみた

potatotips #22で発表した資料の加筆修正版です。
http://connpass.com/event/20240/

Shinichiro Oba

October 14, 2015
Tweet

More Decks by Shinichiro Oba

Other Decks in Programming

Transcript

  1. Swift 2.0で
    RxSwift、ReactKit、
    ReactiveCocoaを使ってみた
    株式会社メルカリ
    iOSエンジニア
    ⼤庭慎⼀郎

    View Slide

  2. ⾃⼰紹介
    ⼤庭 慎⼀郎 (ooba / bricklife)
    株式会社メルカリ
    2013年4⽉⼊社
    「メルカリ」iOS版を開発

    View Slide

  3. メルカリとは?
    いわゆる「フリマアプリ」
    2013年7⽉ JP版リリース
    2014年8⽉ US版リリース

    View Slide

  4. Swift 2.0で
    リアクティブプログラミング

    View Slide

  5. 選択肢
    RxSwift
    ReactKit
    ReactiveCocoa
    etc..

    View Slide

  6. RxSwift
    ReactiveXによる正統派Rx
    RxCocoaと⼀緒に提供されている
    Swift 2.0対応版は2.0。現時点でプレリリース版のみ
    https://github.com/ReactiveX/RxSwift/tree/
    2.0.0-alpha.4

    View Slide

  7. ReactKit
    LINEの稲⾒さん作。Swift初期からある
    同じ作者のSwiftTaskと合わせて使う
    Swift 2.0対応版が正式リリースされている
    https://github.com/ReactKit/ReactKit

    View Slide

  8. ReactiveCocoa
    Objective-C時代からある⽼舗
    Swift 2.0対応版は4.0。現時点でプレリリース版のみ
    https://github.com/ReactiveCocoa/
    ReactiveCocoa/tree/v4.0-alpha.1

    View Slide

  9. 公式なドキュメントと
    サンプル

    View Slide

  10. RxSwift
    ドキュメント、サンプル
    ともにリポジトリの中に
    含まれる。結構豊富

    View Slide

  11. ReactKit
    ドキュメントは最低限。
    サンプルは専⽤のリポジ
    トリがあって結構豊富
    https://github.com/
    ReactKit/
    ReactKitCatalog

    View Slide

  12. ReactiveCocoa
    ドキュメントは多めだが、サンプルはなし
    現状README.mdのコードもコンパイル通らない…
    つらい…

    View Slide

  13. 実際に使ってみた

    View Slide

  14. やってみたこと
    データバインディング(プロパティ⇔UI)
    APIアクセスのストリーム化
    インクリメンタルサーチ

    View Slide

  15. データバインディング

    View Slide

  16. Swiftでのプロパティ更新監視
    純粋なSwiftのクラスではKVOができなくなった
    リアクティブプログラミングのライブラリでは各⾃で
    更新監視できる仕組みを⽤意している
    ※ NSObjectのサブクラスでdynamicなプロパティな
    らKVOが動く

    View Slide

  17. RxSwift
    KVOの代わりにVariableを使う

    View Slide

  18. ReactKit
    KVOに依存

    View Slide

  19. ReactiveCocoa
    KVOの代わりにMutablePropertyを使う

    View Slide

  20. 古き良きReactiveCocoa
    プロパティの変更をテキストフィールドに⾃動反映
    テキストフィールドの変更をプロパティに⾃動反映
    RAC(self.accountNumberTextField, text)
    = RACObserve(self.viewModel, accountNumber);
    RAC(self, inputText) = textField.rac_textSignal;

    View Slide

  21. APIアクセスのストリーム化
    with APIKit

    View Slide

  22. RxSwift

    View Slide

  23. ReactKit

    View Slide

  24. ReactiveCocoa

    View Slide

  25. インクリメンタルサーチ

    View Slide

  26. RxSwift

    View Slide

  27. ReactKit

    View Slide

  28. ReactiveCocoa

    View Slide

  29. 他にも試したいこと
    プロミス
    デリゲートメソッドコールのストリーム化
    通知のストリーム化
    MVVM
    etc..

    View Slide

  30. どれを使えばいいか
    どれも⻑所短所があって選ぶの難しい
    機能や安定性、学習コストを考えると現時点では
    RxSwiftか?
    データバインディングはSwiftBondなどを使う選択肢
    もあり

    View Slide

  31. 組んでみたコード
    整理してGitHubで公開予定
    公開次第、資料アップデートします

    View Slide

  32. ありがとうございました
    メルカリ新規事業でメンバー⼤募集中!
    https://www.wantedly.com/projects/29699
    Swift 2.0+iOS 8以上で開発したい⼈
    ご連絡お待ちしております

    View Slide