$30 off During Our Annual Pro Sale. View Details »

今日こそ理解するHot変換@社内RxSwift勉強会

 今日こそ理解するHot変換@社内RxSwift勉強会

今日こそ理解するHot変換

ukitaka

July 18, 2016
Tweet

More Decks by ukitaka

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. Hotม׵

    View Slide

  4. Cold → Hot

    View Slide

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

    View Slide

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

    View Slide

  7. publish()

    View Slide

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

    View Slide

  9. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. Answer
    ਖ਼ղ͸…

    View Slide

  14. A. ͳʹ΋දࣔ͞Εͳ͍

    View Slide

  15. !?

    View Slide

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

    View Slide

  17. Hotม׵ ϙΠϯτͦͷ1
    ConnectableObservable

    View Slide

  18. ͭ͡͸publish()ͷฦΓ஋…

    View Slide

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

    View Slide

  20. ConnectableObservable

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. multicast()

    View Slide

  26. publish()
    • PublishSubjectʹmulticast͢Δ

    View Slide

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

    View Slide

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

    View Slide

  29. ࣍΁…

    View Slide

  30. ConnectableObservable
    ཧղͨ͠

    View Slide

  31. ଞͷHotؔ࿈ͷOperator͸ʁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. View Slide

  37. Answer
    ਖ਼ղ͸…

    View Slide

  38. A. ͳʹ΋දࣔ͞Εͳ͍

    View Slide

  39. ƅЧƅ)Űō?

    View Slide

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

    View Slide

  41. share()

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. View Slide

  47. Answer
    ਖ਼ղ͸…

    View Slide

  48. A. 1,2,3

    View Slide

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

    View Slide

  50. ࢒ΓͷOperator

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  55. Ҏ্ʂʂ

    View Slide