Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

選択肢 RxSwift ReactKit ReactiveCocoa etc..

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

実際に使ってみた

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

データバインディング

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

RxSwift KVOの代わりにVariableを使う

Slide 18

Slide 18 text

ReactKit KVOに依存

Slide 19

Slide 19 text

ReactiveCocoa KVOの代わりにMutablePropertyを使う

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

RxSwift

Slide 23

Slide 23 text

ReactKit

Slide 24

Slide 24 text

ReactiveCocoa

Slide 25

Slide 25 text

インクリメンタルサーチ

Slide 26

Slide 26 text

RxSwift

Slide 27

Slide 27 text

ReactKit

Slide 28

Slide 28 text

ReactiveCocoa

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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