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
もっと早く教えて欲しかった画面遷移
Search
PKPK-Carnage
January 22, 2019
Programming
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
もっと早く教えて欲しかった画面遷移
PKPK-Carnage
January 22, 2019
More Decks by PKPK-Carnage
See All by PKPK-Carnage
iOSアプリを堅牢にデザインするために知っておくべきたった1つのこと
pkpkcarnage
0
520
アプリへの導線の増やし方.pdf
pkpkcarnage
0
750
「シェア機能」について考えてみた
pkpkcarnage
0
120
リリースビルドでのみ起こる謎のバグに見舞われた話
pkpkcarnage
0
230
Any型をprotocolにキャストする時に 気をつけた方がいい話
pkpkcarnage
0
310
今日から使える! Optionalをいい感じに扱うtips
pkpkcarnage
0
1.3k
iOSの通信処理を簡潔に書く
pkpkcarnage
0
320
Other Decks in Programming
See All in Programming
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
230
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
210
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
850
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
350
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
symfony/aiとlaravel/boost
77web
0
130
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
310
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
500
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
130
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
570
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
BBQ
matthewcrist
89
10k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
320
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The browser strikes back
jonoalderson
0
1.4k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
HDC tutorial
michielstock
2
740
For a Future-Friendly Web
brad_frost
183
10k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Abbi's Birthday
coloredviolet
3
8.6k
Transcript
ͬͱૣ͘ڭ͑ͯཉ͔ͬͨ͠ը໘ભҠ 1/22 ͋Δ͋ΔLTʙεϚϗΞϓϦ։ൃΤϯδχΞʙ Vol.2 PKPK-Carnage 1
About me • iOSྺ2ͪΐͬͱ • Qiita → @PKPK-Carnage • Github
→ PKPK-Carnage • Twitter → @PKPK-Carnage
ը໘ભҠͬͯͲ͏ͬͯ·͔͢ʁ 3
ηάΤ vs ίʔυ 4
ηάΤ 5
Hoge͔ΒFugaʹભҠͯ͠ɺ Fuga͔ΒPiyoʹભҠͯ͠ɾɾɾ 6
7
8
9 extension HogeViewController { @IBAction private func didTapFugaButton(_ sender: UIButton)
{ self.performSegue(withIdentifier: "showFuga", sender: sender.tag) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? FugaViewController { if let value = sender as? Int { vc.value = value } } } }
͋ͷը໘͔Βͦͷը໘ʹભҠͯ͠ɺ ͦͷը໘͔Β3छྨͷը໘ʹભҠͯ͠ɾɾɾ 10
11
12
13 extension HogeViewController { @IBAction private func didTapFugaButton(_ sender: UIButton)
{ self.performSegue(withIdentifier: "showFuga", sender: sender.tag) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? FugaViewController { if let value = sender as? Int { vc.value = value } } } }
14 extension HogeViewController { @IBAction private func didTapFugaButton(_ sender: UIButton)
{ self.performSegue(withIdentifier: "showFuga", sender: sender.tag) } @IBAction private func didTapPiyoButton(_ sender: UIButton) { self.performSegue(withIdentifier: "showPiyo", sender: sender.currentTitle) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? FugaViewController { if let value = sender as? Int { vc.value = value } } else if let vc = segue.destination as? PiyoViewController { if let value = sender as? String { vc.value = value } } } }
! 15
(PPE #BE • ભҠΛࢹ֮తʹݟΕΔ • ؆୯ʹ࣮Ͱ͖Δ 22 • ը໘͕૿͑ΔͱΧΦε •
ίϯϑϦΫτͰઈ͢Δ • identifierͰભҠઌΛࢦఆ͠ͳ͚ ΕͳΒͳ͍ • prepareϝιου͕ѻ͍ͮΒ͍
ίʔυ 23
24 extension HogeViewController { @IBAction private func didTapFugaButton(_ sender: UIButton)
{ self.performSegue(withIdentifier: "showFuga", sender: sender.tag) } }
25 extension HogeViewController { @IBAction private func didTapFugaButton(_ sender: UIButton)
{ let vc = FugaViewController(nibName: "FugaViewController", bundle: .main) vc.value = sender.tag self.navigationController?.pushViewController(vc, animated: true) } }
(PPE #BE • ָ͕͠ʹͰ͖Δ • ίϯϑϦΫτ͍ͯ͢͠͠ • segueΑΓ҆৺ 32 •
ભҠΛࢹ֮తʹݟΕͳ͘ͳΔ • Ͳͷը໘ʹભҠ͢Δ͔Ѳ͢Δ ͷ͕େม • ॲཧΛॻ͘ͷ͕໘
" 34
protocol + extensitonͰղܾ͢Δ 35
ભҠ͢ΔͨΊͷprotocolΛ࡞Δ 36 protocol FugaTransitable: class { func transitToFuga(value: Int) }
extension FugaTransitable where Self: UIViewController { func transitToFuga(value: Int) { let vc = FugaViewController(nibName: "FugaViewController", bundle: .main) vc.value = value self.navigationController?.pushViewController(vc, animated: true) } }
protocolΛద༻͢Δ 37 extension HogeViewController: FugaTransitable { @IBAction private func didTapFugaButton(_
sender: UIButton) { self.transitToFuga(value: sender.tag) } }
ભҠͷprotocolΛՃ͍ͯ͘͠ 38 extension HogeViewController: FugaTransitable, PiyoTransitable { @IBAction private func
didTapFugaButton(_ sender: UIButton) { self.transitToFuga(value: sender.tag) } }
(PPE #BE • ָ͕͠ʹͰ͖Δ • ίϯϑϦΫτ͍ͯ͢͠͠ • segueΑΓ҆৺ • ࣮͞Ε͍ͯΔprotocolͰભҠઌ
͕Θ͔Δ • ॲཧΛॻ͘ͷָ͕ 42 #
·ͱΊ • iOSͰը໘ભҠηάΤͱίʔυͷ2ύλʔϯ͋Δ • ͦΕͧΕϝϦοτͱσϝϦοτ͕͋Δ • protocolͱextensionΛۦ͢ΕίʔυͰͷσϝϦοτΛഉ আͰ͖Δ • ͜ͷΓํΛͬͨ࣌ʹͬͱૣ͘Γ͔ͨͬͨͱࢥͬͨ
47
͓ΘΓ 48