RxSwift コードリーディングの勘所@社内RxSwift勉強会

Preview:

Citation preview

RxSwift @ RxSwift

https://speakerdeck.com/bricklife/rxswiftfalseobserveontosubscribeonwoli-jie-suru

• RxMarbles

Hot

• RxSwift Operator

ReactiveX

(Driver …)

• Operator

• Hot / Cold

• RxSwift v2.5.0 (2016 7 master)

• 1

1

Operator source

Sequence Map Filter

Sequence Map Filter

filter

filter

Filter

filter

source filter

Observable

map

Map

source

Map source Sequence(Sequence Observable.of )

source

Filter source Map

source

Sequence Map Filter

source

source

Sequence Map Filter

source

source

source

Sequence Map Filter

source

source

create Operator source

• create, just, of, error, never create

Operator source

• map filter Operator

Hot subscribeOn/observeOn

source

create Operator source

• Operator

create Operator

source

• source Observable

source ( ) subscribe

• ( )subscribe

Hot / Cold Operator

source

• create Operator Observable

source

source

Sequence Map Filter

source

2

Operator

Operator

Operator

• source subscribe

• source

Operator

Sequence Map Filter Observer

subscribe

Operator

subscribe

Sequence Map Filter Observer

subscribe subscribe

source subscribe

Operator

Sequence Map Filter Observer

on on on

Operator

subscribe

Sequence Map Filter Observer

subscribe subscribe

on on on

Operator

3

• source subscribe

• subscribe

• on

: Filter

: Filter

run subscribe

: Filter

sink source subscribe

: Filter

Sequence Map Filter Observer

subscribe

subscribe

: Filter

Sequence Map Filter Observer

subscribe subscribe

source subscribe

: Filter

: Filter

on source

: Filter

Next

: Filter

: Filter

: Filter

Sequence Map Filter Observer

on

source

: Filter

Sequence Map Filter Observer

on on

✌('ω'✌ ) ✌('ω')✌ ( ✌'ω')✌

3

• source subscribe

• subscribe

• on

Subject …

3

• source subscribe

• subscribe

• on

create Operator …

• subscribe

3

Sink / SinkIter

( ) Operator

• source subscribe

• source

( ) Operator

• source subscribe

• source

subscribe observer

Filter

Filter

Filter

Sink

Sink

• ( )source observer

• Filter FilterSink Map MapSink

Operator Sink

(subscribe )

Sequence Map Filter Observer

Filter

Sequence Map Filter Observer

subscribe run

subscribe(observer)

Filter

Sequence Map Filter Observer

subscribe(observer)

observer

Filter

Sequence Map Filter Observer

observer FilterSink

FilterSink(observer)

Filter

Sequence Map Filter Observer

FilterSink source subscribe

source.subscribe(FilterSink(observer))

Map

Sequence Map Filter Observer

source.subscribe(FilterSink(observer))

Map

Sequence Map Filter Observer

source.subscribe(FilterSink(observer))

observer FilterSink(observer)

Map

Sequence Map Filter Observer

MapSink(FilterSink(observer))

observer FilterSink

Map

Sequence Map Filter Observer

source.subscribe(MapSink(FilterSink(observer)))

MapSink source subscribe

(on )

MapSink

Sequence Map Filter Observer

MapSink(FilterSink(observer)).on(.Next(2))

MapSink

Sequence Map Filter Observer

selector

.Next(2) → .Next(4)

MapSink

Sequence Map Filter Observer

FilterSink(observer).on(.Next(4))

FilterSink

Sequence Map Filter Observer

FilterSink(observer).on(.Next(4))

FilterSink

Sequence Map Filter Observer

value % 4 == 0

FilterSink

Sequence Map Filter Observer

observer.on(.Next(4))

✌('ω'✌ ) ✌('ω')✌ ( ✌'ω')✌

subscribe(MapSink(FilterSink(observer)))

Sequence Map Filter Observer

subscribe(FilterSink(observer))subscribe(observer)

observer Sink

source subscribe

Sequence Map Filter Observer

observer.on(.Next)FilterSink(observer).on(.Next)

MapSink(FilterSink(observer)).on(.Next)

Sink

observer

SinkIter

SinkIter

• merge flatMap ( )

Observable<Observable<E>>

SinkIter

Observable<Observable<E>>

SinkIter

Observable<Observable<E>> Observable

subscribe Sink

SinkIter

Observable<Observable<E>> Observable

subscribe SinkIter

Cold Observable

Cold Observable

• subscribe

• subscribe

Just

Just

subscribe ….

Just

Cold

Cold

subscribe

Just Map Filter Observer

subscribe subscribe

on on on

BehaviorSubject

BehaviorSubject

subscribe

BehaviorSubject

BehaviorSubject

observer

BehaviorSubject

subscribe

BehaviorSubject

subscribe observer

BehaviorSubject

BehaviorSubject

on

BehaviorSubject

BehaviorSubject

Observer

✌('ω'✌ ) ✌('ω')✌ ( ✌'ω')✌

• Rx Operator