ࠓͦ͜ཧղ͢ΔHot / Cold@ࣾRxSwiftษڧձ
View Slide
RxͰΈͳ࠷ॳʹͭ·ͮ͘ϙΠϯτ
Hot / Cold
Hot / Cold• Hot / Cold Ή͔͍ͣ͠• Hot / Cold Α͘Θ͔Βͳ͍• Hot / Cold ཧղͰ͖ͳ͍• Rxͦ͠͏… Rxා͍…
ࡾᵆ( ^o^)ᵒ
ࡾᵆ( ^o^)ᵒ※ Bondྑ͍ϥΠϒϥϦͰ͢
͜ͷεϥΠυͰ• جຊతͳ֓೦Λཧղ্ͨ͠ͰɺHot / Cold Ͱ৺͕ંΕͦ͏ʹͳͬͨํΛλʔήοτʹͯ͠ΔͷͰɺ͋ΔఔͷRxSwiftͷཧղΛඞཁͱ͠·͢ɻ
͜ͷεϥΠυͰ• ·ͨHotมʹ͍ͭͯ͘ͳΔͷͰผͷػձʹઆ໌͠·͢ɻ• ͱΓ͋͑ͣ Hot / Cold ͷੑ࣭ʹͯ͠આ໌͠·͢ɻ
͜ͷεϥΠυͰ• ྫ (ΫΠζ) Λग़͠ͳ͕ΒHot / Cold ͦΕͧΕ͕ͲΜͳੑ࣭Λ͍࣋ͬͯΔͷ͔֬ೝ͍͖ͯ͠·͢ɻ• ·ͩͦΕͧΕͷੑ࣭ҧ͍Λઆ໌͍ͯ͠ͳ͍ͷͰ͕͢ɺ͋ͱͰઆ໌͘͢͢͠ΔͨΊʹ࠷ॳʹʮલఏࣝʯͱʮݟ͚ํʯͷϧʔϧΛઆ໌͠·͢ɻ
લఏࣝ
લఏࣝ ͦͷ1Hot / Cold ʮObservableʯͷੑ࣭
ͳʹΛͨΓલͷࣄΛݴ͍ͬͯΔΜͩίΠπ
͡Ό͋ͳʹ͕Observable͔
͡Ό͋ͳʹ͕Observable͔• Subject• PublishSubject, BehaviorSubject, ReplaySubject …
͡Ό͋ͳʹ͕Observable͔• Subject• PublishSubject, BehaviorSubject, ReplaySubject …• Operator• map, filter, flatMap …• create, of, just, error …
͡Ό͋ͳʹ͕Observable͔• Subject• PublishSubject, BehaviorSubject, ReplaySubject …• Operator ← !?• map, filter, flatMap …• create, of, just, error …
લఏࣝ ͦͷ2֤छOperator (Λද͢Ϋϥε)ʮObservableʯͰ͋Δ
filter
filterฦΓͷܕObservable
filter࣮ଶfilter operatorΛද͢Filterͱ͍͏Ϋϥε
just
justฦΓͷܕObservable
just࣮ଶJustͱ͍͏Ϋϥε
લఏࣝ·ͱΊ• Hot / Cold ʮObservableʯͷੑ࣭• SubjectʮObservableʯ• Operator (Λද͢Ϋϥε)ʮObservableʯ
Hot / Cold ͷ ݟ͚ํ
ݟ͚ํ ͦͷ1SubjectHotͰ͋Δ
Subject• PublishSubject• BehaviorSubject• ReplaySubject͜ΕΒHotͰ͋Δ
ݟ͚ํ ͦͷ2΄ͱΜͲͷOperatorColdͰ͋Δ
Hotʹؔ࿈͢ΔΦϖϨʔλHotʹؔ࿈͢ΔΦϖϨʔλҎԼͷΈɻ͜ΕΒ͕ಛʹݺΕͯͳ͚ΕHotʹม͞ΕΔ͜ͱͳ͍ɻ• multicast / publish• replay / replayAll• connect / refCount• share / shareReplay• shareReplayLatestWhileConnected
SubjectͳͷͰHot
Map OperatorCold
Filter OperatorCold
Subject Map Filter↑ Α͘Έ͔͚Δਤ
ݟ͚ํ·ͱΊ• Subject Hot• Operator ΄ͱΜͲ͕ Cold• publishͳͲҰ෦ͷOperator Hot (ʹؔ࿈)
ͰɺHot / Cold ͬͯͳʹʁ
͓·ͨͤ͠·ͨ͠Hot / Coldͷੑ࣭
Question1ͳΜͱදࣔ͞ΕΔͰ͠ΐ͏ʁ
Answerਖ਼ղ…
A. ͳʹදࣔ͞Εͳ͍
Coldͷੑ࣭ ͦͷ1ColdͳObservablesubscribe͞ΕΔ·Ͱಈ࡞͠ͳ͍
Coldsubscribe͞ΕΔ·Ͱಈ࡞͠ͳ͍Sequence
Coldsubscribe͞ΕΔ·Ͱಈ࡞͠ͳ͍Sequence Map
Coldsubscribe͞ΕΔ·Ͱಈ࡞͠ͳ͍୭subscribe͍ͯ͠ͳ͍ → ಈ࡞͠ͳ͍
͡Ό͋subscribeͨ͠Βʁ
Hotͷੑ࣭ ͦͷ1HotͳObservablesubscribe͞Εͳͯ͘ಈ࡞͢Δٯʹ
Question2ͳΜͱදࣔ͞ΕΔͰ͠ΐ͏ʁ
ղઆSubject Map
• ಈ࡞͠ͳ͍ = ड͚औΔ͜ͱ͢Β͠ͳ͍Coldsubscribe͞ΕΔ·Ͱಈ࡞͠ͳ͍Subject MapSubjectΛྲྀ͢ ड͚औΒͳ͍
Question3ͳΜͱදࣔ͞ΕΔͰ͠ΐ͏ʁ
A. 1, 2, 3
ղઆSubject Map Hot
HotલͷColdΛՔಇͤ͞Δͱॻ͘ͱͦ͠͏͕ͩɺཁHotͳObservableதͰsubscribeΛݺΜͰΔ͚ͩɻSubject Map HotsubscribeՔಇ
͜͜·Ͱͷ·ͱΊ• Cold ͳObservablesubscribe͞ΕΔ·Ͱಈ࡞͠ͳ͍• Hot ͳObservablesubscribe͞Εͳͯ͘ಈ࡞͢Δ• Hot ͳObservableલͷCold ΛՔಇͤ͞Δ
Hot ͷ͏Ұͭେ͖ͳੑ࣭
Hotͷੑ࣭ ͦͷ2HotͳObservableذͰ͖Δ
Coldͷੑ࣭ ͦͷ2ColdͳObservableذͰ͖ͳ͍ٯʹ
ذͰ͖Δͱʁ• ذͰ͖Δ = ObserverΛෳ࣋ͯΔ• Cold ͳObservableObserverΛ1͔ͭ࣋ͯ͠ͳ͍• Hot ͳObservableObserverΛෳ࣋ͯΔ※ આ໌؆ུԽͷͨΊʹʮObserverʯͱ͍ͯ͠·͕͢ɺͪΖΜ͜͜·ͰͷྫͷΑ͏ʹذޙʹObservableΛͭͳ͛ͯߦ͘͜ͱͰ͖·͢ɻ
͑ʁෳ࣋ͯͳ͍ͷʁ
͑ʁෳ࣋ͯͳ͍ͷʁͳΜ͔Ͱ͖ͦ͏ͳงғؾ͋Δ͚Ͳʁʁʁ
Sequence Map
Sequence Map Observer1ͭΊ͕subscribe
Sequence Map ObserverMap Observer2ͭΊsubscribe͍͚ͨ͠Ͳ͢Ͱʹ1ͭ͞ΕͯΔ…
Sequence Map ObserverMap Observer
Sequence Map ObserverSequence Map Observer
Sequence Map ObserverSequence Map ObserverετϦʔϜ͕2ຊʹ !!
ͦͷ݁ՌͲ͏ͳΔ͔
ͦͷ݁ՌͲ͏ͳΔ͔Sequence Map ObserverSequence Map Observer2ετϦʔϜग़ྗ͞ΕΔ
Hotͷ߹Hotʹ͢Δ(·ͩಈ࡞͠ͳ͍)(ৄࡉHotมͷͱ͖ʹઆ໌)
Hotͷ߹
Hotͷ߹͜͜ͰετϦʔϜ։࢝(ৄࡉHotมͷͱ͖ʹઆ໌)
Hotͷ߹Sequence Map Hot
Hotͷ߹Sequence Map Hot Observer1ͭΊ͕subscribe
Hotͷ߹Sequence Map Hot ObserverObserver2ͭΊsubscribe
Hotͷ߹Sequence MapObserverHotObserver
Hotͷ߹Sequence MapObserverHotObserverذ !!!
ͦͷ݁ՌͲ͏ͳΔ͔Sequence MapObserverHotObserverҰճ͔͠print͞Εͳ͍
͜͜·Ͱͷ·ͱΊ• Cold ͳObservableذͰ͖ͳ͍• Hot ͳObservableذͰ͖Δ
Hot ͷ࠷ޙͷੑ࣭
Question4ͳΜͱදࣔ͞ΕΔͰ͠ΐ͏ʁ
͜͜ͰετϦʔϜ։࢝(ৄࡉHotมͷͱ͖ʹઆ໌)Hotʹ͢Δ(·ͩಈ࡞͠ͳ͍)
A. 2, 4, 6
͋Εʁ 2ճsubscribeͯ͠Δͷʹʁ
Hotͷੑ࣭ ͦͷ3HotͳObservableͷΠϕϯτ֤ObserverͰڞ༗͞ΕΔ
͢ΔͱͲ͏ͳΔ͔• ֤Observerʹରͯ͠ಉ͡Πϕϯτ͕ૹग़͞ΕΔɻͭ·Γͦ͜·ͰͷColdԿݺΕͳ͍ɻ(ذͷੑ࣭ͱ͜ΖͰ֬ೝࡁΈ)• ͢ͰʹྲྀΕͨΠϕϯτ(Next)ૹग़͞Εͳ͍ɻͭ·Γ్த͔Βsubscribe͢Δͱ్த͔Β͔͠ड͚औΕͳ͍ɻ
ղઆετϦʔϜՔಇ։࢝࣌Ͱobserver1ͭ
ղઆ2,4,6 ͕දࣔ͞ΕΔ
ղઆ͜͜ʹࢸͬͨ࣌ͰશͯͷNext͢Ͱʹૹग़ࡁΈɻ࠶ྲྀΕΔ͜ͱͳ͍ɻ
ղઆΑͬͯɺͳʹදࣔ͞Εͳ͍
ղઆ
͡Ό͋Coldͷ߹ʁ
͡Ό͋Coldͷ߹ʁSequence Map ObserverSequence Map Observer
͡Ό͋Coldͷ߹ʁ͢Ͱʹղઆͨ͠௨ΓɺετϦʔϜࣗମ͕2ͭʹͳΔɻͳͷͰɺ྆ํͷObserverͰ࠷ॳͷΠϕϯτ͔Βͯ͢ड͚औΔ͜ͱ͕Ͱ͖ΔɻSequence Map ObserverSequence Map Observer
ੑ࣭·ͱΊ
Ҏ্ʂ
࠷ޙʹ• ͜͜·Ͱઆ໌ͨ͠ͷ͋͘·Ͱ֓೦తͳͰ͢ɻͲ͜Ͱͳʹ͕ى͍ͬͯ͜Δ͔ΛͪΌΜͱཧղ͢ΔʹɺΓ࣮Λ͕ΜͬͯಡΜͰ͍ͩ͘͞ɻ(ίʔυϦʔσΟϯάͷצॴผ్ൃද͠·͢ɻ)• Hotมʹ͍ͭͯผ్ղઆ͠·͢ɻ