Slide 1

Slide 1 text

Rxのストリームを 感じるために大切なこと 〜RxSwift編〜 1 @Web技術勉強会#01 2019/04/06(土) @tofu_san0000

Slide 2

Slide 2 text

2 @tofu_san0000 豆腐: 木綿派 エディタ: Vim、PHPStorm、XCode 言語: Swift、PHP、Vue.js

Slide 3

Slide 3 text

3 アジェンダ ● RxSwiftとは ● RxSwiftの基本 ● ストリームの操作 ● まとめ

Slide 4

Slide 4 text

4 アジェンダ ● RxSwiftとは ● RxSwiftの基本 ● ストリームの操作 ● まとめ

Slide 5

Slide 5 text

● 各言語で実装されている「Rx」のSwift向けライブラリ ● RxKotlin、RxJava、RxJS、RxPHPなどがある 5 RxSwiftとは

Slide 6

Slide 6 text

6 RxSwiftとは > Rxとは ● Rx ○ Reactive Programming ○ Extensions ● Rxは以下の3つを組み合わせたもの ○ Observableパターン ○ Iteratorパターン ○ 関数型プログラミング

Slide 7

Slide 7 text

● あらゆるデータをストリームとして処理できる ● 非同期処理がシンプルに書ける ○ コールバック地獄からの解放 ● 覚えればRx化した各言語が使いやすくなる ○ 例) RxKotlin、RxJava、RxJS 7 RxSwiftとは > Rxのメリット

Slide 8

Slide 8 text

8 アジェンダ ● RxSwiftとは ● Rxの基本 ● ストリームの操作 ● まとめ

Slide 9

Slide 9 text

● 基本は以下の3つを覚えれる ○ Observable ○ Subject ○ Disposable 9 Rxの基本

Slide 10

Slide 10 text

● 監視することができる対象 ● 監視してデータ(イベント)を受け取ることができる ● Observableはストリーム(Stream)とも呼ぶ 10 Rxの基本 > Observable

Slide 11

Slide 11 text

● Observable.just() ○ 例: Observable.just(10) ● Observable.of() ○ Observable.of(“a”, “b”, “c”) ● Observable.from() ○ Observable.from([1, 2, 3]) 11 Rxの基本 > Observable > ストリームの生成

Slide 12

Slide 12 text

● next ○ データが正しく流れてきたというイベント ○ 任意の型のデータを引数にもつ ● error ○ エラー(例外)で異常停止した時に流れるイベント ○ 発生したエラーを引数にもつ ● completed ○ 完了時に発生するイベント ○ 最後に一度だけ発生する 12 Rxの基本 > Observable > イベント

Slide 13

Slide 13 text

ストリームはnextでデータを流し、completedで終了する 一度completedが流れたら、next/errorは流せない errorが流れたら、next/error/completedは流せない 13 Rxの基本 > Observable > イベント next next next next next next completed next next next next completed next next next next error

Slide 14

Slide 14 text

● ストリームの購読 ○ ストリームから流れているイベントを処理する ● subscribe()メソッドでストリームを購読できる ○ 購読とは、ストリームのイベントを実行すること 14 Rxの基本 > Observable > ストリームの購読

Slide 15

Slide 15 text

Observable.of(“a”, “b”, “c”, “d”).subscribe() 15 Rxの基本 > Observable > ストリームの購読 subscribe() a b c d completed c d next next next next next next

Slide 16

Slide 16 text

● Observerを継承しているのでObservableとして扱える ● 任意のデータを流す機能をもったObservable 16 Rxの基本 > Subject

Slide 17

Slide 17 text

● PublishSubject ○ 過去のデータを保持しないSubject ● BehaviorSubject ○ 過去のデータの直近1つを保持しているSubject ● RepalySubject ○ 過去のデータを指定するバッファだけ保持するSubject 17 Rxの基本 > Subject > 種類

Slide 18

Slide 18 text

18 Rxの基本 > Subject > 種類 > PublishSubject completed subscribe() subscribe() PublishSubject

Slide 19

Slide 19 text

19 Rxの基本 > Subject > 種類 > BehaviorSubject completed subscribe() subscribe() BehaviorSubject

Slide 20

Slide 20 text

● 直訳すると破棄・処分できるもの ● Observableをsubscribe(購読)した戻り値 ● Disposableに対してdispose()を呼ぶことで 非同期処理のキャンセル ● 監視する側としての処理をキャンセル 20 Rxの基本 > Disposable

Slide 21

Slide 21 text

21 Rxの基本 > Disposable > dispose() subscribe() Disposable.dispose() dispose()

Slide 22

Slide 22 text

let disposable = Observable.of(“a”, “b”, “c”) .subscribe( x in // “a”, “b”, “c” onNext: { value in // イベント発生時の処理 }, onError: { error in // エラー発生時の処理 }, onCompleted: { // 完了時の処理 } ) 22 Rxの基本 > コード例

Slide 23

Slide 23 text

23 アジェンダ ● RxSwiftとは ● Rxの基本 ● ストリームの操作 ● まとめ

Slide 24

Slide 24 text

● Observable、Subjectで作成したストリームを操作できる ● ストリームを変換・合成・生成 24 Rxの基本 > オペレータ

Slide 25

Slide 25 text

● map ○ ストリームを変換する ● filter ○ ストリームをフィルタする ● flatMap ○ ストリームを変換する ○ クロージャの返り値がObservable 25 Rxの基本 > オペレータ > ストリームの操作

Slide 26

Slide 26 text

26 Rxの基本 > オペレータ > ストリームの操作 > map 0 Observable.of(0, 1, 2, 3).map { x in x * 2 } 1 2 3 4 6 0 2

Slide 27

Slide 27 text

27 Rxの基本 > オペレータ > ストリームの操作 > filter 0 Observable.of(0, 1, 2, 3).filter { x in x > 1 } 1 2 3 2 3

Slide 28

Slide 28 text

28 Rxの基本>オペレータ>ストリームの操作 > flatMap 0 Observable.of(0, 1, 2, 3).flatMap { x in Observable.of(x, x * 2) } 1 2 3 2 3 0 1 0 2 4 6

Slide 29

Slide 29 text

let disposable = Observable.of(1, 2, 3) .filter { x in > 1 } // 2, 3 .map { x in x * 2 } // 4, 6 .flatMap { x in Observable.of(x, x * 2) } // 4, 8, 6, 12 .subscribe( x in onNext: { value in // イベント発生時の処理 }, onError: { error in // エラー発生時の処理 }, onCompleted: { // 完了時の処理 } ) 29 Rxの基本>オペレータ>ストリームの操作>コード例

Slide 30

Slide 30 text

30 アジェンダ ● RxSwiftとは ● Rxの基本 ● ストリームの操作 ● まとめ

Slide 31

Slide 31 text

● Observable、Subject、Disposableの3つを覚える ● イベント・データは全てRx化できる ● イベント・データをストリームとして考える ● オペレータを使い、処理をつなげる 31 まとめ