Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Responder Chainを使って コードをスッキリさせたい - 第1回 HAKATA.swift

ukitaka
April 16, 2018

Responder Chainを使って コードをスッキリさせたい - 第1回 HAKATA.swift

ukitaka

April 16, 2018
Tweet

More Decks by ukitaka

Other Decks in Programming

Transcript

  1. Responder ChainΛ࢖ͬͯ
    ίʔυΛεοΩϦ͍ͤͨ͞
    HAKATA.swift
    @ukitaka

    View Slide

  2. twitter: @ukitaka_
    github: @ukitaka
    Yuki Takahashi

    View Slide

  3. ࣗݾ঺հ
    ❤ ؔ਺ܕϓϩάϥϛϯάɺDDD
    ✏ ܕγεςϜɺίϯύΠϥ
    ௿ϨΠϠʔ

    View Slide

  4. ࠓ೔ͷ࿩

    View Slide

  5. ͍͖ͳΓͰ͕͢ɺ
    ͜ΜͳέʔεΛߟ͑ͯΈΔ

    View Slide

  6. Cellͷதͷ
    ϘλϯΛλοϓͨ͠Β
    Alert / ActionSheetग़͍ͨ͠

    View Slide

  7. View Slide

  8. ͋Γ͕ͪ

    View Slide

  9. ஍ຯʹΊΜͲ͍͘͞
    • UIAlertControllerΛग़͢ʹ͸ViewControllerͰ
    ॲཧΛ͢Δඞཁ͕͋Δ
    • Cell͸ViewControllerͳΜͯ஌Βͳ͍
    • ViewController΋CellͷϘλϯΛ(ී௨͸)௚઀ࢀ
    র͍ͯ͠ͳ͍

    View Slide

  10. Α͋͘Δରॲ๏
    • DelegateΛҾճ͢
    • ֊૚͕ਂ͘ͳΕ͹ͳΔ΄Ͳਏ͍
    • Viewߏ଄ͷมԽʹऑ͍

    View Slide

  11. ͳΜͱ͔͍ͨ͠

    View Slide

  12. ݪ఺ʹཱͪฦͬͯMVC

    View Slide

  13. MVCͰ͸Ͳ͏͋Δ΂͖ʁ

    View Slide

  14. View Slide

  15. View Slide

  16. ϢʔβΞΫγϣϯͷॲཧ
    • MVCʹ͓͚ΔControllerͷΑ͏ͳΦϒδΣΫ
    τʹ௨஌Λͯ͠ϢʔβΞΫγϣϯड͚ͱΔͷ
    ͕ී௨
    • MVCʹݶΒͣɺͲͷΞʔΩςΫνϟͰ͋ͬͯ
    ΋ಉ͡

    View Slide

  17. ௨஌Λ͠Α͏

    View Slide

  18. ཧ૝

    View Slide

  19. ௨஌͢ΔଆΠϝʔδ
    .notifyΛݺͿ͚ͩ

    View Slide

  20. ௨஌Λड͚औΔଆΠϝʔδ
    ͍͍ײ͡ʹDelegateͰड͚औΕΔ

    View Slide

  21. DelegateΛҾճ͢ඞཁ͕ͳ͍
    DelegateύλʔϯͷΑ͏ͳ
    Πϝʔδ

    View Slide

  22. ͦ͜Ͱ
    Responder Chain

    View Slide

  23. = UIResponderͷ࿈ͳΓ

    View Slide

  24. View Slide

  25. UIResponder
    • UIReponder = ϢʔβͷೖྗΛर͑Δ΍ͭ
    • ͋ΔsubviewͰΠϕϯτΛर͏ͱॲཧͰ͖Δͱ
    ͜Ζ·Ͱ࣍ʑʹॲཧΛճ͍ͯ͘͠
    • self.next Ͱ࣍ͷResponder͕औΕΔ
    = Responder Chain

    View Slide

  26. View Slide

  27. UIResponder
    • ResponderChain্ʹ͸౰વViewController΋
    ͍Δʂ
    • DelegateΛҾ͖ճ͢·Ͱ΋ͳ͘ɺ͢Ͱʹͭͳ
    ͕͍ͬͯΔ
    • ͜Εʹ৐͔ͬΕ͹͍͍ײ͡ʹViewControllerʹ
    ʮ௨஌ʯͰ͖ͦ͏ʂ

    View Slide

  28. ͳΜ͔࢖͑ͦ͏

    View Slide

  29. Ͳ͏΍Δ͔ʁ

    View Slide

  30. ActionΛఆٛ͢Δ

    View Slide

  31. DelegateΛఆٛ͢Δ

    View Slide

  32. ViewEventΛఆٛ͢Δ
    ୭͕ϋϯυϧ͢Δ͔ͱɺ
    Ͳ͏σΟεύον͢Δ͔ΛܾΊΔɻ

    View Slide

  33. ViewEventΛఆٛ͢Δ

    View Slide

  34. UIResponderΛ֦ு͢Δ
    Responder ChainΛḷͬͯɺ
    ΠϕϯτΛϋϯυϧͰ͖Δ΍ͭΛݟ͚ͭΔ

    View Slide

  35. ׬੒ʂ

    View Slide

  36. ௨஌͢ΔଆΠϝʔδ
    .notifyΛݺͿ͚ͩ

    View Slide

  37. ௨஌Λड͚औΔଆΠϝʔδ
    ͍͍ײ͡ʹDelegateͰड͚औΕΔ

    View Slide

  38. ཧ૝ͷੈք͕࣮ݱͨ͠

    View Slide

  39. ྑ͍఺
    • DelegateΛViewͷਂ͍֊૚·ͰҾճ͢ඞཁ͕
    ͳ͘ͳͬͨ
    • Viewͷ֊૚͕มԽͨ͠ͱͯ͠΋ɺίʔυͷม
    ߋ͕ෆཁɻViewͷมߋʹڧ͍ɻ

    View Slide

  40. มΘΒͳ͍఺
    • ͋ΔΠϕϯτΛड͚औΔͨΊͷprotocol࣮૷
    ͠๨ΕΛίϯύΠϧ࣌ʹ͸ݕग़Ͱ͖ͳ͍
    • ͜Ε͸Delegateઃఆ͠๨ΕͰ΋ಉ͡
    • ࣮ࡍʹಈ͔͢ or ςετͰΧόʔ

    View Slide

  41. RxCocoa΁ͷԠ༻

    View Slide

  42. RxCocoa + Responder Chain
    • RxΛ࢖͍ͬͯͯ΋ಉ͡໰୊͕ى͜Δ
    • RxDataSourcesΛ࢖͍ͬͯͯ΋ɺCellͷதͷΠ
    ϕϯτ͸र͑ͳ͍
    • Responder Chainʹྲྀͯ͠͠·͓͏

    View Slide

  43. ukitaka/RxResponderChain

    View Slide

  44. ࢖͍ํ

    View Slide

  45. ࡶʹResponder Chainʹྲྀ͢
    Ϙλϯ͕λοϓ͞ΕͨΒ

    View Slide

  46. ࡶʹResponder Chainʹྲྀ͢
    ద੾ͳܕʹม׵ͯ͠

    View Slide

  47. ࡶʹResponder Chainʹྲྀ͢
    Responder Chainʹྲྀ͢

    View Slide

  48. ࡶʹVCͰड͚औΔ
    ViewControllerͰ
    ܕΛࢦఆͯ͠ड͚औΔ

    View Slide

  49. গ͚࣮ͩ͠૷ΛΈΔ

    View Slide

  50. ࣮૷ͷཪଆ
    ࠇຐज़ʹΑ֤ͬͯUIResponderΦϒδΣΫτʹ
    PublishSubjectΛ࣋ͨͤΔ

    View Slide

  51. ࣮૷ͷཪଆ
    self.rx.responderChain Λੜ΍͢

    View Slide

  52. ࣮૷ͷཪଆ
    ͜ͷΦϒδΣΫτ͸ObserverType

    View Slide

  53. ࣮૷ͷཪଆ
    ઒ʹEvent͕ྲྀΕ͖ͯͨΒ
    ResponderChainΛḷͬͯ

    View Slide

  54. ࣮૷ͷཪଆ
    ͖ͬ͞ੜ΍ͨ͠PublishSubjectʹ
    ΠϕϯτΛྲྀ͢

    View Slide

  55. ࣮૷ͷཪଆ
    ड͚औΔͱ͖͸ܕͰfilter

    View Slide

  56. ·ͱΊ

    View Slide

  57. ResponderChain
    • View → ViewController͸Responder Chainܨ
    ͕͍ͬͯΔ
    • ௨஌ʹ࢖͑Δ / ָʹॻ͚Δ / มߋʹڧ͍

    View Slide

  58. ͓ΘΓ

    View Slide