Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Responder Chainを使って コードをスッキリさせたい - 第1回 HAKATA.s...
Search
ukitaka
April 16, 2018
Programming
6
1.3k
Responder Chainを使って コードをスッキリさせたい - 第1回 HAKATA.swift
https://hakata-swift.connpass.com/event/81656/
での発表です。
ukitaka
April 16, 2018
Tweet
Share
More Decks by ukitaka
See All by ukitaka
CSの生産性改善を支える分析環境 Mercari CS/CRE Tech Talk #1
ukitaka
1
2.6k
switchのexhaustiveness/redundancy チェック 理論と実装 わいわいswiftc #8 @ukitaka
ukitaka
0
180
SwiftのDemanglerを書く @ わいわいswiftc番外編
ukitaka
0
410
Swiftの型システムに入門する - iOSDC Japan 2018
ukitaka
10
4.7k
理論から入門するswift/lib/Sema - わいわいswiftc #1
ukitaka
5
1.5k
Realmの処理を再利用可能かつ合成可能にする
ukitaka
0
870
マルチスレッドRxSwift @ 社内RxSwift勉強会
ukitaka
5
1.1k
今日こそ理解するHot / Cold @社内RxSwift勉強会
ukitaka
14
2.6k
RxSwift コードリーディングの勘所@社内RxSwift勉強会
ukitaka
3
970
Other Decks in Programming
See All in Programming
全部見せます! クラシルリワードのSwiftTesting移行プロジェクト
uetyo
0
210
Amazon Neptuneで始める初めてのグラフDB ー グラフDBを使う意味を考える ー
satoshi256kbyte
2
260
Crafting Cross-Platform Adventures: Building a Game Engine with Kotlin Multiplatform
dwursteisen
0
120
事業フェーズの変化に対応する 開発生産性向上のゼロイチ
masaygggg
0
200
『ドメイン駆動設計をはじめよう』中核の業務領域
masuda220
PRO
5
1k
オートマトン学習しろ / Do automata learning
makenowjust
3
130
Android開発以外のAndroid開発経験の活かしどころ
konifar
2
1k
rails_girls_is_my_gate_to_join_the_ruby_commuinty
maimux2x
0
200
あなたのアプリ、ログはでてますか?あるいはログをだしてますか? (Funabashi.dev用 軽量版)
uzulla
2
120
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
550
AndroidアプリのUIバリエーションをあの手この手で確認する / Check UI variations of Android apps by various means
tkmnzm
1
170
Rechartsで楽にゴリゴリにカスタマイズする!
10tera
1
170
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
179
21k
Building an army of robots
kneath
302
42k
Intergalactic Javascript Robots from Outer Space
tanoku
268
26k
Optimizing for Happiness
mojombo
375
69k
Learning to Love Humans: Emotional Interface Design
aarron
270
40k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
23
1.7k
Building a Modern Day E-commerce SEO Strategy
aleyda
36
6.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Gamification - CAS2011
davidbonilla
79
5k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.8k
How To Stay Up To Date on Web Technology
chriscoyier
786
250k
Transcript
Responder ChainΛͬͯ ίʔυΛεοΩϦ͍ͤͨ͞ HAKATA.swift @ukitaka
twitter: @ukitaka_ github: @ukitaka Yuki Takahashi
ࣗݾհ ❤ ؔܕϓϩάϥϛϯάɺDDD ✏ ܕγεςϜɺίϯύΠϥ ϨΠϠʔ
ࠓͷ
͍͖ͳΓͰ͕͢ɺ ͜ΜͳέʔεΛߟ͑ͯΈΔ
Cellͷதͷ ϘλϯΛλοϓͨ͠Β Alert / ActionSheetग़͍ͨ͠
None
͋Γ͕ͪ
ຯʹΊΜͲ͍͘͞ • UIAlertControllerΛग़͢ʹViewControllerͰ ॲཧΛ͢Δඞཁ͕͋Δ • CellViewControllerͳΜͯΒͳ͍ • ViewControllerCellͷϘλϯΛ(ී௨)ࢀ র͍ͯ͠ͳ͍
Α͋͘Δରॲ๏ • DelegateΛҾճ͢ • ֊͕ਂ͘ͳΕͳΔ΄Ͳਏ͍ • ViewߏͷมԽʹऑ͍
ͳΜͱ͔͍ͨ͠
ݪʹཱͪฦͬͯMVC
MVCͰͲ͏͋Δ͖ʁ
None
None
ϢʔβΞΫγϣϯͷॲཧ • MVCʹ͓͚ΔControllerͷΑ͏ͳΦϒδΣΫ τʹ௨Λͯ͠ϢʔβΞΫγϣϯड͚ͱΔͷ ͕ී௨ • MVCʹݶΒͣɺͲͷΞʔΩςΫνϟͰ͋ͬͯ ಉ͡
௨Λ͠Α͏
ཧ
௨͢ΔଆΠϝʔδ .notifyΛݺͿ͚ͩ
௨Λड͚औΔଆΠϝʔδ ͍͍ײ͡ʹDelegateͰड͚औΕΔ
DelegateΛҾճ͢ඞཁ͕ͳ͍ DelegateύλʔϯͷΑ͏ͳ Πϝʔδ
ͦ͜Ͱ Responder Chain
= UIResponderͷ࿈ͳΓ
None
UIResponder • UIReponder = ϢʔβͷೖྗΛर͑Δͭ • ͋ΔsubviewͰΠϕϯτΛर͏ͱॲཧͰ͖Δͱ ͜Ζ·Ͱ࣍ʑʹॲཧΛճ͍ͯ͘͠ • self.next
Ͱ࣍ͷResponder͕औΕΔ = Responder Chain
None
UIResponder • ResponderChain্ʹવViewController ͍Δʂ • DelegateΛҾ͖ճ͢·Ͱͳ͘ɺ͢Ͱʹͭͳ ͕͍ͬͯΔ • ͜Εʹ͔ͬΕ͍͍ײ͡ʹViewControllerʹ ʮ௨ʯͰ͖ͦ͏ʂ
ͳΜ͔͑ͦ͏
Ͳ͏Δ͔ʁ
ActionΛఆٛ͢Δ
DelegateΛఆٛ͢Δ
ViewEventΛఆٛ͢Δ ୭͕ϋϯυϧ͢Δ͔ͱɺ Ͳ͏σΟεύον͢Δ͔ΛܾΊΔɻ
ViewEventΛఆٛ͢Δ
UIResponderΛ֦ு͢Δ Responder ChainΛḷͬͯɺ ΠϕϯτΛϋϯυϧͰ͖ΔͭΛݟ͚ͭΔ
ʂ
௨͢ΔଆΠϝʔδ .notifyΛݺͿ͚ͩ
௨Λड͚औΔଆΠϝʔδ ͍͍ײ͡ʹDelegateͰड͚औΕΔ
ཧͷੈք͕࣮ݱͨ͠
ྑ͍ • 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ܨ ͕͍ͬͯΔ • ௨ʹ͑Δ /
ָʹॻ͚Δ / มߋʹڧ͍
͓ΘΓ