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

Post on 16-Apr-2017

685 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

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 で楽しませんか?

以上です!ご静聴ありがとうございました!

top related