potatotips #22で発表した資料の加筆修正版です。 http://connpass.com/event/20240/
Swift 2.0でRxSwift、ReactKit、ReactiveCocoaを使ってみた株式会社メルカリiOSエンジニア⼤庭慎⼀郎
View Slide
⾃⼰紹介⼤庭 慎⼀郎 (ooba / bricklife)株式会社メルカリ2013年4⽉⼊社「メルカリ」iOS版を開発
メルカリとは?いわゆる「フリマアプリ」2013年7⽉ JP版リリース2014年8⽉ US版リリース
Swift 2.0でリアクティブプログラミング
選択肢RxSwiftReactKitReactiveCocoaetc..
RxSwiftReactiveXによる正統派RxRxCocoaと⼀緒に提供されているSwift 2.0対応版は2.0。現時点でプレリリース版のみhttps://github.com/ReactiveX/RxSwift/tree/2.0.0-alpha.4
ReactKitLINEの稲⾒さん作。Swift初期からある同じ作者のSwiftTaskと合わせて使うSwift 2.0対応版が正式リリースされているhttps://github.com/ReactKit/ReactKit
ReactiveCocoaObjective-C時代からある⽼舗Swift 2.0対応版は4.0。現時点でプレリリース版のみhttps://github.com/ReactiveCocoa/ReactiveCocoa/tree/v4.0-alpha.1
公式なドキュメントとサンプル
RxSwiftドキュメント、サンプルともにリポジトリの中に含まれる。結構豊富
ReactKitドキュメントは最低限。サンプルは専⽤のリポジトリがあって結構豊富https://github.com/ReactKit/ReactKitCatalog
ReactiveCocoaドキュメントは多めだが、サンプルはなし現状README.mdのコードもコンパイル通らない…つらい…
実際に使ってみた
やってみたことデータバインディング(プロパティ⇔UI)APIアクセスのストリーム化インクリメンタルサーチ
データバインディング
Swiftでのプロパティ更新監視純粋なSwiftのクラスではKVOができなくなったリアクティブプログラミングのライブラリでは各⾃で更新監視できる仕組みを⽤意している※ NSObjectのサブクラスでdynamicなプロパティならKVOが動く
RxSwiftKVOの代わりにVariableを使う
ReactKitKVOに依存
ReactiveCocoaKVOの代わりにMutablePropertyを使う
古き良きReactiveCocoaプロパティの変更をテキストフィールドに⾃動反映テキストフィールドの変更をプロパティに⾃動反映RAC(self.accountNumberTextField, text)= RACObserve(self.viewModel, accountNumber);RAC(self, inputText) = textField.rac_textSignal;
APIアクセスのストリーム化with APIKit
RxSwift
ReactKit
ReactiveCocoa
インクリメンタルサーチ
他にも試したいことプロミスデリゲートメソッドコールのストリーム化通知のストリーム化MVVMetc..
どれを使えばいいかどれも⻑所短所があって選ぶの難しい機能や安定性、学習コストを考えると現時点ではRxSwiftか?データバインディングはSwiftBondなどを使う選択肢もあり
組んでみたコード整理してGitHubで公開予定公開次第、資料アップデートします
ありがとうございましたメルカリ新規事業でメンバー⼤募集中!https://www.wantedly.com/projects/29699Swift 2.0+iOS 8以上で開発したい⼈ご連絡お待ちしております