https://hakata-swift.connpass.com/event/81656/ での発表です。
Responder ChainΛͬͯίʔυΛεοΩϦ͍ͤͨ͞HAKATA.swift@ukitaka
View Slide
twitter: @ukitaka_github: @ukitakaYuki Takahashi
ࣗݾհ❤ ؔܕϓϩάϥϛϯάɺDDD✏ ܕγεςϜɺίϯύΠϥ ϨΠϠʔ
ࠓͷ
͍͖ͳΓͰ͕͢ɺ͜ΜͳέʔεΛߟ͑ͯΈΔ
CellͷதͷϘλϯΛλοϓͨ͠ΒAlert / ActionSheetग़͍ͨ͠
͋Γ͕ͪ
ຯʹΊΜͲ͍͘͞• UIAlertControllerΛग़͢ʹViewControllerͰॲཧΛ͢Δඞཁ͕͋Δ• CellViewControllerͳΜͯΒͳ͍• ViewControllerCellͷϘλϯΛ(ී௨)ࢀর͍ͯ͠ͳ͍
Α͋͘Δରॲ๏• DelegateΛҾճ͢• ֊͕ਂ͘ͳΕͳΔ΄Ͳਏ͍• ViewߏͷมԽʹऑ͍
ͳΜͱ͔͍ͨ͠
ݪʹཱͪฦͬͯMVC
MVCͰͲ͏͋Δ͖ʁ
ϢʔβΞΫγϣϯͷॲཧ• MVCʹ͓͚ΔControllerͷΑ͏ͳΦϒδΣΫτʹ௨Λͯ͠ϢʔβΞΫγϣϯड͚ͱΔͷ͕ී௨• MVCʹݶΒͣɺͲͷΞʔΩςΫνϟͰ͋ͬͯಉ͡
௨Λ͠Α͏
ཧ
௨͢ΔଆΠϝʔδ.notifyΛݺͿ͚ͩ
௨Λड͚औΔଆΠϝʔδ͍͍ײ͡ʹDelegateͰड͚औΕΔ
DelegateΛҾճ͢ඞཁ͕ͳ͍DelegateύλʔϯͷΑ͏ͳΠϝʔδ
ͦ͜ͰResponder Chain
= UIResponderͷ࿈ͳΓ
UIResponder• UIReponder = ϢʔβͷೖྗΛर͑Δͭ• ͋ΔsubviewͰΠϕϯτΛर͏ͱॲཧͰ͖Δͱ͜Ζ·Ͱ࣍ʑʹॲཧΛճ͍ͯ͘͠• self.next Ͱ࣍ͷResponder͕औΕΔ= Responder Chain
UIResponder• ResponderChain্ʹવViewController͍Δʂ• DelegateΛҾ͖ճ͢·Ͱͳ͘ɺ͢Ͱʹͭͳ͕͍ͬͯΔ• ͜Εʹ͔ͬΕ͍͍ײ͡ʹViewControllerʹʮ௨ʯͰ͖ͦ͏ʂ
ͳΜ͔͑ͦ͏
Ͳ͏Δ͔ʁ
ActionΛఆٛ͢Δ
DelegateΛఆٛ͢Δ
ViewEventΛఆٛ͢Δ୭͕ϋϯυϧ͢Δ͔ͱɺͲ͏σΟεύον͢Δ͔ΛܾΊΔɻ
ViewEventΛఆٛ͢Δ
UIResponderΛ֦ு͢ΔResponder ChainΛḷͬͯɺΠϕϯτΛϋϯυϧͰ͖ΔͭΛݟ͚ͭΔ
ʂ
ཧͷੈք͕࣮ݱͨ͠
ྑ͍• DelegateΛViewͷਂ͍֊·ͰҾճ͢ඞཁ͕ͳ͘ͳͬͨ• Viewͷ֊͕มԽͨ͠ͱͯ͠ɺίʔυͷมߋ͕ෆཁɻViewͷมߋʹڧ͍ɻ
มΘΒͳ͍• ͋ΔΠϕϯτΛड͚औΔͨΊͷprotocol࣮͠ΕΛίϯύΠϧ࣌ʹݕग़Ͱ͖ͳ͍• ͜ΕDelegateઃఆ͠ΕͰಉ͡• ࣮ࡍʹಈ͔͢ or ςετͰΧόʔ
RxCocoaͷԠ༻
RxCocoa + Responder Chain• RxΛ͍ͬͯͯಉ͕͡ى͜Δ• RxDataSourcesΛ͍ͬͯͯɺCellͷதͷΠϕϯτर͑ͳ͍• Responder Chainʹྲྀͯ͠͠·͓͏
ukitaka/RxResponderChain
͍ํ
ࡶʹResponder Chainʹྲྀ͢Ϙλϯ͕λοϓ͞ΕͨΒ
ࡶʹResponder Chainʹྲྀ͢దͳܕʹมͯ͠
ࡶʹResponder Chainʹྲྀ͢Responder Chainʹྲྀ͢
ࡶʹVCͰड͚औΔViewControllerͰܕΛࢦఆͯ͠ड͚औΔ
গ͚࣮ͩ͠ΛΈΔ
࣮ͷཪଆࠇຐज़ʹΑ֤ͬͯUIResponderΦϒδΣΫτʹPublishSubjectΛ࣋ͨͤΔ
࣮ͷཪଆself.rx.responderChain Λੜ͢
࣮ͷཪଆ͜ͷΦϒδΣΫτObserverType
࣮ͷཪଆʹEvent͕ྲྀΕ͖ͯͨΒResponderChainΛḷͬͯ
࣮ͷཪଆ͖ͬ͞ੜͨ͠PublishSubjectʹΠϕϯτΛྲྀ͢
࣮ͷཪଆड͚औΔͱ͖ܕͰfilter
·ͱΊ
ResponderChain• View → ViewControllerResponder Chainܨ͕͍ͬͯΔ• ௨ʹ͑Δ / ָʹॻ͚Δ / มߋʹڧ͍
͓ΘΓ