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/

86aef9515e5986c096bc398c8990992e?s=128

Shinichiro Oba

October 14, 2015
Tweet

More Decks by Shinichiro Oba

Other Decks in Programming

Transcript

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

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

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

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

  5. 選択肢 RxSwift ReactKit ReactiveCocoa etc..

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

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

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

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

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

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

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

  13. 実際に使ってみた

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

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

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

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

  18. ReactKit KVOに依存

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

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

    = textField.rac_textSignal;
  21. APIアクセスのストリーム化 with APIKit

  22. RxSwift

  23. ReactKit

  24. ReactiveCocoa

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

  26. RxSwift

  27. ReactKit

  28. ReactiveCocoa

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

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

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

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