- RxSwiftを実際に導入してみた件 -
辰己 佳祐
Twitter:@TK_u_nya
Github:cztatsumi-keisuke
Qiita:Nietzsche
• 所属
– 株式会社CyberZ OPENREC事業部
• 職種
– iOSエンジニア
• 個人アプリ
– AppStoreで「Keisuke Tatsumi」で検索検索ぅ〜♪
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
はじめに
• なぜRxSwiftを使うことになったのか
1.
2.
3.
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発の話が来た
2.
3.
OPENREC Messenger
• ゲーマー向け無料コミュニ
ケーションアプリ
• 一人で複数のプロフィールを
使える
• AppStore、Google Play
にて、ダウンロード
よろしくお願いします!
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発の話が来た
2. 開発言語をSwiftに
3.
OPENRECでのiOS開発
• OPENREC.tv は Objective-C で開発
• Version 4.0 で大幅なリニューアルを行った
• 今までの技術資産を使うのならそのままでも
OPENRECでのiOS開発
• OPENREC.tv は Objective-C で開発
• Version 4.0 で大幅なリニューアルを行った
• 今までの技術資産を使うのならそのままでも
ところが、、、
最近のiOS界隈
「Objective-Cはゴミ箱へ」というツイート Objective-C から Swift への変換サービス
最近のiOS界隈
「Objective-Cはゴミ箱へ」というツイート Objective-C から Swift への変換サービス
進むSwiftへの移行!
Swiftにしましょうか(ニッコリ
)
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発
2. 開発言語をSwiftに
3. 流行に乗ろう
RxSwiftにピンッときたら
• 最近よく「RxSwiftはいいぞ。」といった内容の
記事やスライドをよく目にする
• 他社も導入しはじめている
– ニコニコ漫画アプリ(ドワンゴ)、アッテ(メルカリ)、
ヤフオク!(ヤフー) など
• RxSwiftの知見が増えてきている
乗るしかない このビッグウェーブに!
ー Butchさん
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発
2. 開発言語をSwiftに
3. 流行に乗ろう
というわけで、、、
はじめに
• なぜRxSwiftを使うことになったの?
1. 新規サービスの開発
2. 開発言語をSwiftに
3. 流行に乗ろう
やっはろー !!!
RxSwift World!
というわけで、、、
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
RxSwiftとは
• RxSwiftではなく、Rx + Swift = RxSwift
– RxSwiftとは、RxのSwift版のこと
• Rx = Reactive Extensionsの略
– イベントストリームを抽象化するライブラリ
(メルカリのishkawaさんの表現をお借りしました)
– 他にもいろんな言語のRxがある
http://reactivex.io/
ロゴかっこいい →
シャケかな? →
イベントストリームを抽象化するライブラリ
(´・ω・`)ちょっと何言ってるかわかんない
イベントストリームを抽象化するライブラリ
イベントストリームとは
×
受け取った値
エラー 完了開始
マーブル図によるストリームのイメージ
時間
• 流れのイメージは「川」
• 川から流れてくるのは値、エラー、完了の3種類
• 値のみ必要な場合はエラーと完了は無視することもできる
RxSwiftはこの川を監視する
何をストリームにできるの?
• UIイベント
• KVO
• デリゲートメソッドの呼び出し
• 文字列 などなど…
ほぼ全てストリームにできます!
ex.1)UIButtonのタップ
タップ
時間
タップ
時間差で2回タップしたでござるの巻
ex.2)UITextFieldのテキストの変化
a ab
aを入力
時間
bを入力
時間差で文字を入力したでござるの巻
a
bを削除
Ex.3)UITableViewの生成
セルのアイテム数を取得
時間
セルそのものを取得
テーブルを作りたいでござるの巻
テーブルの更新
では、実際に書くとどうなる?
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
ex.1)UIButtonのタップ
ex.1)UIButtonのタップ
① ②
①:@objc を付けなければならない
②:メソッドとして分ける必要がある
ex.1)UIButtonのタップ
①:@objc を付けなくてもよい!
②:メソッドとして分ける必要がない!
ex.2)UITextFieldのテキストの変化
ex.2)UITextFieldのテキストの変化
①
②
③
①:デリゲートを宣言しなければいけない
②:デリゲートを設定しなければいけない
③:デリゲートメソッドを使って検知する必要がある
ex.2)UITextFieldのテキストの変化
①:デリゲートを宣言しなくてよい!
②:デリゲートを設定しなくてよい!
③:デリゲートメソッドとかいらないね!
Ex.3)UITableViewの生成
Ex.3)UITableViewの生成
①
②
③
①:デリゲートを宣言しなければいけない
②:デリゲートを設定しなければいけない
③:デリゲートメソッドを使って検知する必要がある
Ex.3)UITableViewの生成
①:デリゲートを宣言しなくてよい!
②:デリゲートを設定しなくてよい!
③:デリゲートメソッドとかやっぱりいらないね!
RxSwiftすごすぎないですか?
RxSwift使ってみたくなりません?
Agenda
• はじめに
• RxSwiftとは
• RxSwiftだとこう書ける
• RxSwiftを使ってみた結果
RxSwiftを導入した結果
短所
• 学習コストは高め
– 慣れるためにチーム内で勉強会を開いたり、情
報共有用のスプレッドシートを作成したりしました
• ビルドに少し時間がかかる
– たまに補完が狂ってコードのハイライトが真っ黒
になるときもある
• アプリのバイナリサイズは10MBほど増える
RxSwiftを導入した結果
長所
• 慣れれば超便利
– 使えるようになると、手放せなくなりそう
• ストリームで監視するため、フラグが減った
– OPENREC.tvの開発時には多数生成していた状態
保持用のフラグがほぼ不要になった
• コードの可読性が上がった
– デリゲートやボタンの反応など、メソッドの目移り
をする必要がなくなった
結果的には導入して正解!
みなさんもRxSwiftで楽しませんか?
以上です!
ご静聴ありがとうございました!

ご注文はRxですか? -RxSwiftを実際に導入してみた件-

Editor's Notes

  • #21 何の魚か知ってる人いたら教えてください。
  • #25 可愛い娘を監視するのではなくて川を監視するのです。
  • #34 Pub / Sub モデル: Publish / Subscribe disposeBag:監視対象のストリームを登録しておくと、自身のクラスが解放された時に監視を終了させてくれます。逆にこれを用意していないとずっと監視が終了しませんので要注意 rx_tap:ボタンのタップ検知用のストリーム
  • #37 Pub / Sub モデル: Publish / Subscribe disposeBag:監視対象のストリームを登録しておくと、自身のクラスが解放された時に監視を終了させてくれます。逆にこれを用意していないとずっと監視が終了しませんので要注意 rx_text:textfieldの文字列変化検知用のストリーム
  • #40 Pub / Sub モデル: Publish / Subscribe disposeBag:監視対象のストリームを登録しておくと、自身のクラスが解放された時に監視を終了させてくれます。逆にこれを用意していないとずっと監視が終了しませんので要注意 Variable:RxSwiftのSubjectsクラスの一つで、プロパティの変化を監視できるようにするKVO的なやつです。 rx_itemWithIdentifier:RxSwiftのデータバインド用メソッドの一つで、UITableViewDataSourceのcellForRowAtIndexPathと連動しています。