ご注文はrxですか? -rxswiftを実際に導入してみた件-
TRANSCRIPT
- RxSwift を実際に導入してみた件 -
辰己 佳祐Twitter : @TK_u_nyaGithub : cztatsumi-keisukeQiita : 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 で楽しませんか?
以上です!ご静聴ありがとうございました!