Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
RxSwift ίʔυϦʔσΟϯάͷצॴ @ࣾRxSwiftษڧձ
Slide 2
Slide 2 text
ͳΜͰίʔυಡΉඞཁ͕͋Δͷʁ https://speakerdeck.com/bricklife/rxswiftfalseobserveontosubscribeonwoli-jie-suru
Slide 3
Slide 3 text
ͳΜͰίʔυಡΉඞཁ͕͋Δͷʁ • ެࣜυΩϡϝϯτ RxMarblesͳͲυΩϡϝϯτ ॆ࣮͍ͯ͠ΔΑ͏ʹݟ͑Δ͕ɺHotมϚϧν εϨουͳͲ͕͖ؔͯͨ࣌͠ͷڍಈυΩϡϝ ϯτΛ͏͚ͩͰཧղ͢Δͷ͍͠ɻ • ·ͨɺRxSwiftಠࣗͷ֓೦OperatorͳͲɺ ReactiveXͷυΩϡϝϯτʹॻ͔Ε͍ͯͳ͍͜ͱ গ͋͠Δɻ(DriverͳͲ…)
Slide 4
Slide 4 text
͜ͷεϥΠυͰ • ओʹOperatorͷ࣮Ͱ͘ΘΕ͍ͯΔ֓೦ ख๏Λઆ໌͠·͢ɻ • ͦͷ͋ͱͰ Hot / Cold ͳͲΛྫʹ͋͛ͯɺͲ ͏࣮ͬͯݱ͞Ε͍ͯΔͷ͔Λઆ໌͠·͢ɻ
Slide 5
Slide 5 text
͜ͷεϥΠυͰ • RxSwift v2.5.0 (20167݄࣌Ͱͷmaster) Λݟͯ·͢ɻ • ͨͿΜόʔδϣϯ1ܥࠓޙͷόʔδϣϯͰ ௨༻͢Δ͔ෆ໌Ͱ͕͢ɺͨͿΜେ͖͘ζϨ Δ͜ͱແ͍ͱࢥ͍·͢ɻ
Slide 6
Slide 6 text
צॴ ͦͷ1 Operatorʹ͓͚Δ ʮsourceʯ
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
Sequence Map Filter ↑ Α͘Έ͔͚Δਤ
Slide 9
Slide 9 text
Sequence Map Filter ↑ Α͘Έ͔͚Δਤ ίʔυ্Ͳ͏දݱ͞Ε͍ͯΔʁ
Slide 10
Slide 10 text
filter
Slide 11
Slide 11 text
filter ࣮ଶFilterͱ͍͏Ϋϥε
Slide 12
Slide 12 text
filter sourceͱͯ͠ɺfilterΛݺͼग़ͨ͠ ObservableΛ͍࣋ͬͯΔ
Slide 13
Slide 13 text
map Mapಉ༷
Slide 14
Slide 14 text
ͭ·Γ source MapͷsourceSequence (SequenceObservable.ofͷ෦දݱ)
Slide 15
Slide 15 text
ͭ·Γ source FilterͷsourceMap
Slide 16
Slide 16 text
ͭ·Γ source Sequence Map Filter source
Slide 17
Slide 17 text
ͭ·Γ source Sequence Map Filter source sourceͷ࿈ͳΓͱݴ͑Δ
Slide 18
Slide 18 text
ͱ͜ΖͰɺ source Sequence Map Filter source ͜Εͷsourceʁ
Slide 19
Slide 19 text
createܥͷOperatorʹsourceͳ͍ • create, just, of, error, never ͳͲɺcreateܥͷ Operatorʹsourceͳ͍ɻ • mapfilterͷΑ͏ͳҰൠతͳOperatorɺ HotมܥɺsubscribeOn/observeOnʹ source͕͋Δɻ
Slide 20
Slide 20 text
createܥͷOperatorʹsourceͳ͍ • ͔͜͜Βɺී௨ʹʮOperatorʯͱॻ͍͍ͯ ͨΒʮcreateܥҎ֎ͷOperatorʯͷ͜ͱͩͱ ࢥ͍ͬͯͩ͘͞ɻ
Slide 21
Slide 21 text
sourceͲ͏ΘΕΔͷʁ • sourceཁObservableͳͷͰɺదͳλΠ ϛϯάͰͦͷsourceΛ(෦తʹ) subscribe͠ ͯΠϕϯτΛड͚औΓ࢝Ί·͢ɻ • ͲͷλΠϛϯάͰ(෦తʹ)subscribe͕ݺ ΕΔ͔ɺHot / ColdͳͲOperatorͷੑ࣭ʹ Αͬͯҧ͖ͬͯ·͢ɻ
Slide 22
Slide 22 text
sourceʹ͍ͭͯ·ͱΊ • createܥҎ֎ͷOperatorલͷObservableΛ sourceͱͯ࣋ͭ͜͠ͱͰɺਤͷΑ͏ͳ࿈ͳΓ Λ࣮ݱ͍ͯ͠Δɻ source Sequence Map Filter source
Slide 23
Slide 23 text
צॴ ͦͷ2 Operator࣮Ͱ νΣοΫ͖͢
Slide 24
Slide 24 text
Operatorͷ࣮ͰͳʹΛΈΔ͔ ҎԼͲͷOperatorʹڞ௨͢Δಈ͖ • దͳλΠϛϯάͰsourceΛsubscribe͢Δ • source͔Βड͚औͬͨΠϕϯτʹదͳॲཧ ΛՃ͑ͯ࣍ʹྲྀ͢
Slide 25
Slide 25 text
Operatorͷ࣮ͰͳʹΛΈΔ͔ Sequence Map Filter Observer subscribe
Slide 26
Slide 26 text
Operatorͷ࣮ͰͳʹΛΈΔ͔ subscribe Sequence Map Filter Observer subscribe subscribe ෦తʹsourceΛsubscribe͢Δ
Slide 27
Slide 27 text
Operatorͷ࣮ͰͳʹΛΈΔ͔ Sequence Map Filter Observer on on on ΠϕϯτΛड͚औͬͯॲཧΛՃ͑ͯ࣍ʹྲྀ͢
Slide 28
Slide 28 text
Operatorͷ࣮ͰͳʹΛΈΔ͔ subscribe Sequence Map Filter Observer subscribe subscribe on on on
Slide 29
Slide 29 text
Operatorͷ࣮ͰͳʹΛΈΔ͔ ΈΔϙΠϯτ3ͭ • ͍ͭsourceͷsubscribeΛߦ͏͔ • subscribe͕ݺΕͨΒͳʹ͕ى͜Δ͔ • on͕ݺΕͨΒͳʹ͕ى͜Δ͔
Slide 30
Slide 30 text
ྫ: Filter
Slide 31
Slide 31 text
ྫ: Filter runsubscribe͕ݺΕͨͱ͖ʹݺΕΔϝιου
Slide 32
Slide 32 text
ྫ: Filter sinkͱ͔͍͏͕ͭsourceͷsubscribeΛߦ͍ͬͯΔ
Slide 33
Slide 33 text
ྫ: Filter Sequence Map Filter Observer subscribe ͭ·Γɺࣗͷsubscribe͕ݺΕͨΒ
Slide 34
Slide 34 text
ྫ: Filter Sequence Map Filter Observer subscribe subscribe sourceͷsubscribeΛߦ͏
Slide 35
Slide 35 text
ྫ: Filter
Slide 36
Slide 36 text
ྫ: Filter onsource͔ΒΠϕϯτ͕ྲྀΕ͖ͯͨ࣌ʹݺΕΔϝιου
Slide 37
Slide 37 text
ྫ: Filter Nextͷ߹
Slide 38
Slide 38 text
ྫ: Filter ఆ༻ͷؔʹΛͯ͠
Slide 39
Slide 39 text
ྫ: Filter ݅Λຬ͍ͨͯ͠Ε࣍ྲྀ͢
Slide 40
Slide 40 text
ྫ: Filter Sequence Map Filter Observer on source͔ΒΠϕϯτ͕དྷͨΒ
Slide 41
Slide 41 text
ྫ: Filter Sequence Map Filter Observer on on ఆͨ͠ޙ࣍͢
Slide 42
Slide 42 text
ಡΊΔʂ ✌('ω'✌ )ࡾ✌('ω')✌ࡾ( ✌'ω')✌
Slide 43
Slide 43 text
·ͱΊ ΈΔϙΠϯτ3ͭ • ͍ͭsourceͷsubscribeΛߦ͏͔ • subscribe͕ݺΕͨΒͳʹ͕ى͜Δ͔ • on͕ݺΕͨΒͳʹ͕ى͜Δ͔
Slide 44
Slide 44 text
Subject… ಉ͘͡3ͭΛΈΔͱڍಈ͕͔ͭΊΔͱࢥ͍·͢ɻ • ͍ͭsourceͷsubscribeΛߦ͏͔ • subscribe͕ݺΕͨΒͳʹ͕ى͜Δ͔ • on͕ݺΕͨΒͳʹ͕ى͜Δ͔
Slide 45
Slide 45 text
createܥͷOperator… ͱΓ͋͑ͣɺ • subscribe͕ݺΕͨΒͳʹ͕ى͜Δ͔ ͜ΕΛݟ͓͚ͯڍಈ͕Θ͔Δͱࢥ͍·͢ɻ
Slide 46
Slide 46 text
צॴ ͦͷ3 Sink / SinkIter
Slide 47
Slide 47 text
(෮श) Operatorͷಈ͖ • దͳλΠϛϯάͰsourceΛsubscribe͢Δ • source͔Βड͚औͬͨΠϕϯτʹదͳॲཧ ΛՃ͑ͯ࣍ʹྲྀ͢
Slide 48
Slide 48 text
(෮श) Operatorͷಈ͖ • దͳλΠϛϯάͰsourceΛsubscribe͢Δ • source͔Βड͚औͬͨΠϕϯτʹదͳॲཧ ΛՃ͑ͯ࣍ʹྲྀ͢ ୭͕subscribe͢Δͷʁobserver୭ʁ
Slide 49
Slide 49 text
Filter
Slide 50
Slide 50 text
Filter
Slide 51
Slide 51 text
Filter
Slide 52
Slide 52 text
Sink
Slide 53
Slide 53 text
Sinkͱʁ • (෦తʹ)sourceͷobserverʹͳΔͭ • FilterʹFilterSinkɺMapʹMapSinkɺͷΑ ͏ʹ΄΅શͯͷOperatorʹରͯ̋̋͠Sink͕ ଘࡏ͢Δ
Slide 54
Slide 54 text
෦తͳಈ͖ (subscribe࣌)
Slide 55
Slide 55 text
Sequence Map Filter Observer
Slide 56
Slide 56 text
Filter Sequence Map Filter Observer subscribe͕ݺΕͨΒrun͕ݺΕΔ subscribe(observer)
Slide 57
Slide 57 text
Filter Sequence Map Filter Observer subscribe(observer) observer͕ͦͷ··͞ΕΔ
Slide 58
Slide 58 text
Filter Sequence Map Filter Observer observerΛݩʹFilterSink͕࡞ΒΕΔ FilterSink(observer)
Slide 59
Slide 59 text
Filter Sequence Map Filter Observer FilterSink͕sourceΛsubscribe͢Δ source.subscribe(FilterSink(observer))
Slide 60
Slide 60 text
Map Sequence Map Filter Observer source.subscribe(FilterSink(observer))
Slide 61
Slide 61 text
Map Sequence Map Filter Observer source.subscribe(FilterSink(observer)) observerͱͯ͠ɺFilterSink(observer)͕ͬͯ͘Δɻ
Slide 62
Slide 62 text
Map Sequence Map Filter Observer MapSink(FilterSink(observer)) observerΛݩʹFilterSink͕࡞ΒΕΔ
Slide 63
Slide 63 text
Map Sequence Map Filter Observer source.subscribe(MapSink(FilterSink(observer))) MapSink͕sourceΛsubscribe͢Δ
Slide 64
Slide 64 text
෦తͳಈ͖ (on࣌)
Slide 65
Slide 65 text
MapSink Sequence Map Filter Observer Πϕϯτ͕ૹग़͞ΕΔ MapSink(FilterSink(observer)).on(.Next(2))
Slide 66
Slide 66 text
MapSink Sequence Map Filter Observer Πϕϯτ͕selectorʹΑͬͯม͞ΕΔ .Next(2) → .Next(4)
Slide 67
Slide 67 text
MapSink Sequence Map Filter Observer Πϕϯτ͕ૹग़͞ΕΔ FilterSink(observer).on(.Next(4))
Slide 68
Slide 68 text
FilterSink Sequence Map Filter Observer Πϕϯτ͕ૹग़͞ΕΔ FilterSink(observer).on(.Next(4))
Slide 69
Slide 69 text
FilterSink Sequence Map Filter Observer ݅νΣοΫ͞ΕΔ value % 4 == 0
Slide 70
Slide 70 text
FilterSink Sequence Map Filter Observer Πϕϯτ͕ૹग़͞ΕΔ observer.on(.Next(4))
Slide 71
Slide 71 text
ಡΊΔʂ ✌('ω'✌ )ࡾ✌('ω')✌ࡾ( ✌'ω')✌
Slide 72
Slide 72 text
·ͱΊ subscribe(MapSink(FilterSink(observer))) Sequence Map Filter Observer subscribe(FilterSink(observer)) subscribe(observer) observerΛSinkʹแΈͳ͕Β sourceΛsubscribe
Slide 73
Slide 73 text
·ͱΊ Sequence Map Filter Observer observer.on(.Next) FilterSink(observer).on(.Next) MapSink(FilterSink(observer)).on(.Next) SinkͰॲཧΛՃ͑ͳ͕Β observerʹΠϕϯτΛྲྀ͢
Slide 74
Slide 74 text
SinkIter
Slide 75
Slide 75 text
SinkIterͱʁ • mergeflatMapͳͲɺ(গͳ͘ͱ෦తʹ) Observable> Λѻ͏ͱ͖ʹ ར༻͞ΕΔɻ
Slide 76
Slide 76 text
SinkIterͱʁ Observable>
Slide 77
Slide 77 text
SinkIterͱʁ Observable> ֎ଆͷObservableΛ subscribe͢Δͷ͕Sink
Slide 78
Slide 78 text
SinkIterͱʁ Observable> ଆͷObservableΛ subscribe͢Δͷ͕SinkIter
Slide 79
Slide 79 text
ಡΜͰΈΑ͏ ColdͳObservable
Slide 80
Slide 80 text
ColdͳObservableͷੑ࣭ • ͍͔ͭ͋͘Γ·͕͢ɺࠓճʮsubscribe͠ͳ ͍ͱಈ࡞͠ͳ͍ʯͱ͍͏ੑ࣭͕ίʔυϨϕϧ ͰͲ͏࣮ݱ͞Ε͍ͯΔ͔Λ֬ೝͯ͠Έ·͢ɻ • ݴ͍͔͑Εʮsubscribe͞Εͨͱ͖ʹಈ࡞Λ ࢝ΊΔʯͰ͢ɻ
Slide 81
Slide 81 text
Just
Slide 82
Slide 82 text
Just subscribe͞ΕΔͱ….
Slide 83
Slide 83 text
Just ͕ૹग़͞ΕΔʂʂʂ
Slide 84
Slide 84 text
Cold
Slide 85
Slide 85 text
Cold subscribe Just Map Filter Observer subscribe subscribe on on on
Slide 86
Slide 86 text
ಡΜͰΈΑ͏ BehaviorSubject
Slide 87
Slide 87 text
BehaviorSubjectͷੑ࣭ • ͍͔ͭ͋͘Γ·͕͢ɺࠓճʮذͰ͖Δʯ ʮsubscribe࣌ʹલͷ͕औΕΔʯΛ֬ೝ͠ ͯΈ·͢ɻ
Slide 88
Slide 88 text
BehaviorSubject લͷΛอ࣋͢Δม
Slide 89
Slide 89 text
BehaviorSubject ෳͷobserver
Slide 90
Slide 90 text
BehaviorSubject subscribe͞ΕͨΒݺΕΔ
Slide 91
Slide 91 text
BehaviorSubject subscribe͞ΕͨΒobserverͱͯ͠ొ
Slide 92
Slide 92 text
BehaviorSubject લͷΛૹग़
Slide 93
Slide 93 text
BehaviorSubject onͰΠϕϯτΛड͚औͬͨͱ͖ʹݺΕΔ
Slide 94
Slide 94 text
BehaviorSubject લͷΛߋ৽
Slide 95
Slide 95 text
BehaviorSubject ֤Observerʹૹग़
Slide 96
Slide 96 text
ಡΊΔʂ ✌('ω'✌ )ࡾ✌('ω')✌ࡾ( ✌'ω')✌
Slide 97
Slide 97 text
·ͱΊ • Rxʹଟ͘ͷOperator͕༻ҙ͞Ε͍ͯ·͢ ͕ɺͦΕΒ΄΅ಉ͡࡞Γʹͳ͓ͬͯΓɺಡ Έํ͔͑͞Ε؆୯ʹڍಈΛ֬ೝ͢Δ͜ͱ ͕Ͱ͖·͢ɻ • ڍಈʹ͕ࣗͳ͚ΕιʔεΛಡΜͰ֬ೝ͠ Α͏ʂ
Slide 98
Slide 98 text
Ҏ্ʂ