Slide 1

Slide 1 text

ࠓ೔ͦ͜ཧղ͢Δ Hotม׵ @ࣾ಺RxSwiftษڧձ

Slide 2

Slide 2 text

https://speakerdeck.com/ukitaka/cold-at-she-nei-rxswiftmian-qiang-hui લճͷଓ͖

Slide 3

Slide 3 text

Hotม׵

Slide 4

Slide 4 text

Cold → Hot

Slide 5

Slide 5 text

(෮श)Hotʹؔ࿈͢ΔΦϖϨʔλ Hotʹؔ࿈͢ΔΦϖϨʔλ͸ҎԼͷΈɻ ͜ΕΒ͕ಛʹݺ͹Εͯͳ͚Ε͹Hotʹม׵͞ΕΔ͜ͱ΋ͳ͍ɻ • multicast / publish • replay / replayAll • connect / refCount • share / shareReplay • shareReplayLatestWhileConnected

Slide 6

Slide 6 text

·͊ͱΓ͋͑ͣ࢖ͬͯΈΔ͔

Slide 7

Slide 7 text

publish()

Slide 8

Slide 8 text

Question1 ͳΜͱදࣔ͞ΕΔͰ͠ΐ͏ʁ

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

͜Μͳͷ؆୯͡ΌΜʂ 1,2,3Ͱ͠ΐʂ

Slide 11

Slide 11 text

͜Μͳͷ؆୯͡ΌΜ Sequence Map Hot subscribe Քಇ

Slide 12

Slide 12 text

͜Μͳͷ؆୯͡ΌΜ Sequence Map Hot subscribe Քಇ

Slide 13

Slide 13 text

Answer ਖ਼ղ͸…

Slide 14

Slide 14 text

A. ͳʹ΋දࣔ͞Εͳ͍

Slide 15

Slide 15 text

!?

Slide 16

Slide 16 text

(෮श)Hotʹؔ࿈͢ΔΦϖϨʔλ Hotʹؔ࿈͢ΔΦϖϨʔλ͸ҎԼͷΈɻ ͜ΕΒ͕ಛʹݺ͹Εͯͳ͚Ε͹Hotʹม׵͞ΕΔ͜ͱ΋ͳ͍ɻ • multicast / publish • replay / replayAll • connect / refCount • share / shareReplay • shareReplayLatestWhileConnected ؚΈͷ͋Δݴ͍ํ

Slide 17

Slide 17 text

Hotม׵ ϙΠϯτͦͷ1 ConnectableObservable

Slide 18

Slide 18 text

ͭ͡͸publish()ͷฦΓ஋…

Slide 19

Slide 19 text

ConnectableObservable • connect() ϝιουΛ࣋ͭ • connect() ΛݺͿ͜ͱͰHotʹม׵׬ྃ͢Δ • connect() ΛݺͿ·ͰObserver͕͍Α͏͕͍ ·͍͕ಈ࡞͠ͳ͍

Slide 20

Slide 20 text

ConnectableObservable

Slide 21

Slide 21 text

ͳΜͰඞཁͳͷʁ • ྫ͑͹ɺෳ਺ͷobserver͕Hotม׵͞Εͨετ ϦʔϜͷ஋Λ࠷ॳ͔ΒͪΌΜͱड͚औΓ͍ͨ ࣌ɻconnect()ΛݺͿ·Ͱಈ࡞͠ͳ͍ͷͰɺͦ ͷؒʹશͯͷobserverΛsubscribe͓ͤͯ͘͞ ͜ͱ͕Ͱ͖Δɻ

Slide 22

Slide 22 text

ͳΜͰඞཁͳͷʁ (ConnectableObservable͕ແ͍ͱͲ͏ͳΔ͔͸ߟ͑ͯΈ͍ͯͩ͘͞)

Slide 23

Slide 23 text

ConnectableObservableΛฦ͢Operator • multicast() • publish() • replay(bufferSize:) • replayAll()

Slide 24

Slide 24 text

multicast() • ͦ΋ͦ΋Hotม׵ͱ͸ɺ಺෦తʹSubjectΛར ༻͍ͯ͠Δ͚ͩͰ͋Δɻ • multicast()͸SubjectΛࢦఆͯͦ͜͠ͰҰ୴Π ϕϯτΛड͚ΔΑ͏ʹ͢ΔOperator

Slide 25

Slide 25 text

multicast()

Slide 26

Slide 26 text

publish() • PublishSubjectʹmulticast͢Δ

Slide 27

Slide 27 text

• ReplaySubjectʹmulticast͢Δ replay(bufferSize:) / replayAll()

Slide 28

Slide 28 text

ConnectableObservable·ͱΊ • ColdͳObservableʹରͯ͠ɺmulticast() / publish() / replay(bufferSize:) / replayAll() Λݺͼ ग़͢͜ͱͰ ConnectableObservableʹม׵Ͱ͖ Δɻ • ConnectableObservableʹରͯ͠connect()Λݺͼ ग़͢͜ͱͰHotͳObservableʹม׵͕׬ྃ͢Δɻ

Slide 29

Slide 29 text

࣍΁…

Slide 30

Slide 30 text

ConnectableObservable ཧղͨ͠

Slide 31

Slide 31 text

ଞͷHotؔ࿈ͷOperator͸ʁ

Slide 32

Slide 32 text

(෮श)Hotʹؔ࿈͢ΔΦϖϨʔλ Hotʹؔ࿈͢ΔΦϖϨʔλ͸ҎԼͷΈɻ ͜ΕΒ͕ಛʹݺ͹Εͯͳ͚Ε͹Hotʹม׵͞ΕΔ͜ͱ΋ͳ͍ɻ • multicast / publish • replay / replayAll • connect / refCount • share / shareReplay • shareReplayLatestWhileConnected

Slide 33

Slide 33 text

ͱΓ͋͑ͣshare()Ͱ΋ ࢖ͬͯΈΔ͔

Slide 34

Slide 34 text

share() ConnectableObservable͡Όͳͯ͘ ObservableͰฦ͖ͬͯͯΔ͠ ͖ͬͱHot΍Ζʂʂʂ

Slide 35

Slide 35 text

Question2 ͳΜͱදࣔ͞ΕΔͰ͠ΐ͏ʁ

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

Answer ਖ਼ղ͸…

Slide 38

Slide 38 text

A. ͳʹ΋දࣔ͞Εͳ͍

Slide 39

Slide 39 text

ƅЧƅ)Űō?

Slide 40

Slide 40 text

Hotม׵ ϙΠϯτͦͷ2 ۂऀ: RefCount

Slide 41

Slide 41 text

share()

Slide 42

Slide 42 text

refCount() • refCount() ͸ ConnectableObservableʹର͠ ͯݺ΂Δ΋͏ҰͭͷOperatorͰ͋Δɻ

Slide 43

Slide 43 text

refCount() • Hotͷ֓೦Λ෴͢ΊΜͲ͍͘͞ศརͳ΍ͭ • Hotͷੑ࣭ͱͯ͠ʮsubscribe͠ͳͯ͘΋ಈ࡞ ͢Δʯͱ͍͏ͷ͕͋Δ͕ɺrefCount͕ڬ·Δ ͱʮHot͕ͩɺ࠷ॳʹsubscribe͞ΕΔ·Ͱಈ ࡞͠ͳ͍ʯΈ͍ͨͳڍಈʹͳΔɻ

Slide 44

Slide 44 text

refCount() • ࡞Γ͸୯७Ͱɺ࠷ॳʹsubscribe͞Εͨ࣌఺Ͱ ಺෦తʹconnect()ΛݺͿɻ

Slide 45

Slide 45 text

Question3 ͳΜͱදࣔ͞ΕΔͰ͠ΐ͏ʁ

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

Answer ਖ਼ղ͸…

Slide 48

Slide 48 text

A. 1,2,3

Slide 49

Slide 49 text

ͪΌΜͱHotม׵͞Εͯͨ (ͳΜͰʁʂͱࢥͬͨํ͸લճͷεϥΠυ΋ΈͯΈ·͠ΐ͏)

Slide 50

Slide 50 text

࢒ΓͷOperator

Slide 51

Slide 51 text

shareReplay(bufferSize:) • ໊લͷ௨Γɺshare + replay • share = publish + refCount • shareReplay = publish + refCount + replay • ʮHot͕ͩɺ࠷ॳʹsubscribe͞ΕΔ·Ͱಈ࡞͠ͳ ͍ʯΛकΓͭͭࢦఆ͞Εͨݸ਺͚ͩ஋Λreplay͢ Δ

Slide 52

Slide 52 text

shareReplay(bufferSize:) • ࣮͸ΊͬͪΌॏཁͰɺRxSwiftͷExampleͰ΋Α͘ʢʁʣ࢖ ΘΕ͍ͯΔɻ • ม਺తʹѻ͍ͭͭɺ࠶ܭࢉͤ͞ͳ͍Α͏ʹ͢Δͱ͖ʹ shareReplay(1)Λ͚ͭΔͱΑ͍ (͜Εʹ͍ͭͯ͸ผ్ൃද͠ ·͢ɻ) • RxSwift v2.5.0࣌఺Ͱ͸shareReplayʹ1Ҏ֎Λ౉͢ͱ࠶ܭࢉ ͕૸Δόάʁ࢓༷ʁ͕͋Δɻshare΋ಉ༷ͷݱ৅༗Γɻ

Slide 53

Slide 53 text

shareReplayLatestWhileConnected() • ໊લ͕ΊͬͪΌ௕͍ • ͜Μͳͷ࢖͏ػձ͋Δͷʁͱࢥ͏͔΋͠Εͳ͍͕ɺ RxSwift(RxCocoa)Ͱఏڙ͞Ε͍ͯΔ Driver͸σϑΥϧτͰ͜Εͱಉ ͡ڍಈΛ͢ΔɻͳͷͰڍಈ͸ཧղ͓ͯ͘͠΂͖ɻ • ShareReplay1 ͱͷҧ͍͸ɺconnect தͰͳ͍ͱ࠷ޙͷ஋͕औΕͳ͍ ͜ͱɻͭ·Γ1౓ .Completed ͕ྲྀΕͨΒͦͷ͋ͱʹ͸replay͞Ε ͣɺ.Completed ͔͠ྲྀΕͯ͜ͳ͍ɻ • ڍಈͷৄࡉͳྫ͸Driverͷͱ͖ʹઆ໌͢ΔͷͰ͜͜Ͱ͸ׂѪɻ

Slide 54

Slide 54 text

Hotม׵·ͱΊ Hotʹม׵͢Δʹ͸ • ConnectableObservableʹม׵ޙɺconnect() ΛݺͿ • RefCountʹରͯ͠1ͭҎ্subscribeΛߦ͏

Slide 55

Slide 55 text

Ҏ্ʂʂ