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
進化を続けるSwift-iOSに追随し続けるために
Search
Kohei Tabata
August 29, 2016
Programming
2.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
進化を続けるSwift-iOSに追随し続けるために
Kohei Tabata
August 29, 2016
More Decks by Kohei Tabata
See All by Kohei Tabata
AIと協業する開発の進め方
nerd0geek1
0
180
営業活動なしで継続的に案件を受注する方法 / how to get a contract without sales as a freelance
nerd0geek1
2
990
生体データを取り扱うアプリ開発の勘所
nerd0geek1
1
150
動線改善とステータス可視化で家庭内のストレスを軽減した話
nerd0geek1
3
4.5k
家庭をプロジェクトとして運営した話
nerd0geek1
2
4.4k
fastlaneの勉強会を主催して学んだこと、得たこと、悩んだこと
nerd0geek1
1
1.2k
みんなで育てるprecheck
nerd0geek1
1
840
matchとは?match導入のメリット
nerd0geek1
4
630
Improve your workflow with Sketch plugin
nerd0geek1
3
1.6k
Other Decks in Programming
See All in Programming
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Creating Composable Callables in Contemporary C++
rollbear
0
160
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
270
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
6k
RTSPクライアントを自作してみた話
simotin13
0
620
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
800
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
890
Performance Engineering for Everyone
elenatanasoiu
0
200
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.4k
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
170
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
260
A2UI という光を覗いてみる
satohjohn
1
140
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
300
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
Leo the Paperboy
mayatellez
7
1.9k
Bash Introduction
62gerente
615
220k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
It's Worth the Effort
3n
188
29k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Transcript
ਐԽΛଓ͚ΔSwift/iOSʹ ਵ͠ଓ͚ΔͨΊʹ 2016/08/29 AKIBA.swift×SwiftѪձ @ώΧϦΤ
ࣗݾհ ɾKohei Tabata(@nerd0geek1) ɾSaib Studio LLC ɾiOS/MacOS/tvOS Developer ɾFastlaneେ͖ ɾ࠷ۙɺϥΠϒϥϦ࡞ΓʹϋϚ͍ͬͯ·͢ɻ
Said Studio LLC Kohei Tabata Next! Remote quick-zip plus Sleeple
http://next.saib-stud.io
ͦΖͦΖळͰ͢Ͷɻ
ळͱ͍͑
ಡॻͷळ
৯ཉͷळ
ӡಈͷळ
৽OSͷळ
͔͠ࠓ
OS/Swift͕ ಉ࣌Ξοϓσʔτʂ
Կ४උΛ ͍ͯ͠ͳ͍ͱ
None
ͲͷΑ͏ʹiOS/Swiftͷ ਐԽʹै͢Δ͔
ࣗͷऔΓΈ ɾίΞػೳҎ֎ͷίʔυͷϞδϡʔϧԽ ɾςετʹΑΔૉૣ͍มߋݕ ɾprotocolΛར༻࣮ͨ͠ͷநԽ ɾΦϒδΣΫτίϯϙδγϣϯ ɹprotocol extensionΛར༻ͨ͠ෳࡶ͞ͷݮ
ίʔυͷϞδϡʔϧԽ ɾ΄ͱΜͲͷϓϩδΣΫτͰɺ࣮͢Δ͜ͱ͍͍ͩͨҰॹɻ ɾ൚༻తͳ෦ʹ͍ͭͯɺϥΠϒϥϦԽ͠ɺϞδϡʔϧͱͯ͠ ɹ͓͘͜ͱͰɺશϓϩδΣΫτʹ͓͍ͯDRYʹॻ͚Δɻ ɹʹOSɺSwiftͷมߋʹରͯ͠࠷খͷमਖ਼ͰରԠͰ͖Δɻ ɾIFఆٛˠ࣮ɾςετͷՃͷॱͰ࣮͢ΔͷͰɺૄ݁߹Ͱ ɹςελϒϧͳίʔυΛॻ͖͍͢ɻ
͜Μͳײ͡ Next! Remote quick-zip plus Next! for Mac TableView Manager
PlayList Player Swift Extensions Logger Pausable Timer
ςετʹΑΔૉૣ͍มߋݕ ɾApple༷ɺ͠ΕͬͱഁյతมߋΛೖΕΔ͜ͱ͕͋Δɻ ɹSwift1.2→Swift2.0ͷStringͷpathૢ࡞ܥϝιουͷഇࢭ ɹSwift2.0→Swift3.0ͷFoundationͷΫϥεˠߏମͷมߋͳͲɻ ɾςετΛՃ͢Δ͜ͱͰɺͦ͏͍ͬͨมߋʹΑΔڍಈͷมԽΛ ɹૉૣ͘ݕͰ͖ΔΑ͏ʹͳΔɻ ɹ
protocolΛར༻࣮ͨ͠ͷநԽ ྫɿ͋ΔViewɺ͋ΔViewModel͕NSUserDefaults ɹɹαʔυύʔςΟͷϥΠϒϥϦͷࢀরΛอ͍࣋ͯ͠Δ߹ ɹˠϞδϡʔϧ͕֎෦ʹґଘ͢ΔͨΊɺςετͰ͖ͳ͍ɻ ɹɹςετͰ͖ͨͱ͔ͯͬͨ͠Γɺޙ͕࢝େมɻɻɻ ViewModel A NSUserDefaults ViewModel B
Dropbox SDK
protocolΛར༻࣮ͨ͠ͷநԽ ྫɿ͋ΔViewɺ͋ΔViewModel͕NSUserDefaults ɹɹαʔυύʔςΟͷϥΠϒϥϦͷࢀরΛอ͍࣋ͯ͠Δ߹ ɹˠϞδϡʔϧ͕֎෦ʹґଘ͢ΔͨΊɺςετͰ͖ͳ͍ɻ ɹɹςετͰ͖ͨͱ͔ͯͬͨ͠Γɺޙ͕࢝େมɻɻɻ
protocolΛར༻࣮ͨ͠ͷநԽ ɾඞཁͳػೳΛ࣋ͭprotocolΛఆٛ(͜͜ͰLocalConfigType)ɻ ɾViewModel͔ΒprotocolΛࢀরɻ ɾ࣮ͰɺNSUserDefaultsΛ෦Ͱࢀর͢ΔLocalConfigΛ͢ ɾςετͰɺLocalConfigMockͰϞοΩϯά͢Δɻ ViewModel A var config: LocalConfigType
protocol LocalConfigType NSUserDefaults LocalConfig: LocalConfigType LocalConfigMock: LocalConfigType var dictionary: [String: AnyObject] ϓϩμΫγϣϯίʔυ ςετ
protocolΛར༻࣮ͨ͠ͷநԽ ɾprotocolΛར༻࣮ͨ͠ͷநԽɺґଘੑͷೖʹ͍ͭͯ ɹલهͷΑ͏ʹ࣮Ͱ͖Δ͕ɺSwiftͷframeworkଘࡏ͍ͯ͠Δɻ
protocolΛར༻࣮ͨ͠ͷநԽ ɾprotocolΛར༻࣮ͨ͠ͷநԽɺґଘੑͷೖʹ͍ͭͯ ɹલهͷΑ͏ʹ࣮Ͱ͖Δ͕ɺSwiftͷframeworkଘࡏ͍ͯ͠Δɻ ɾSwinjectɿେنϓϩδΣΫτͰͷཧʹ͍͍ͯΔͱͷ͜ͱɻ
ΦϒδΣΫτίϯϙδγϣϯͱ protocol extensionͰෳࡶ͞Λݮ
࣮ࡍͷϓϩμΫτΛྫʹ ϑΝΠϧҰཡը໘ Ϋϥυ্ͷ ϑΝΠϧҰཡը໘ ΫϥυΞοϓϩʔυ͢Δ ϑΝΠϧͷબը໘ ϑΝΠϧҠಈը໘
நԽ͢Δͱ A D C B
ѱ͍ઃܭ جఈΫϥε(ViewController) - ڞ௨ίϯϙʔωϯτͷ࡞ - ڞ௨ॲཧͷ࣮ߦ αϒΫϥε - ಠࣗίϯϙʔωϯτͷ࡞ -
ίϯϙʔωϯτͷϨΠΞτ - ಠࣗॲཧͷ࣮ߦ
ѱ͍ઃܭ͕ͳͥѱ͔͔ͬͨ ɾαϒΫϥεΛฤू͢ΔࡍʹɺجఈΫϥεͷ࣮Λؾʹ͢Δඞཁ͕ ɹ͋Δɻ ɾશମͱͯ͠ີ݁߹ʹͳ͍ͬͯΔͨΊɺΞʔΩςΫνϟͷมߋ͕ ɹ͔ͳΓΓʹ͍͘ɻ ɾجఈΫϥε͕ԿͰ͔ΜͰ͍ͬͯΔঢ়ଶʹͳͬͯ͠·ͬͯ ɹ͍ͨ(Ұ෦ͷαϒΫϥεͰ͔͠Θͳ͍ॲཧ͋ͬͨΓɻɻɻ)
ܧঝ͔Βίϯϙδγϣϯ ɾΫϥεΛআ ɾUIͷڞ௨෦ΛΧελϜViewΫϥεͱͯ͠Γग़͢ ɾجఈΫϥεͷॲཧɺҰ୴ɺ֤ViewController
Կ͕ྑ͘ͳ͔ͬͨʁ ɾίʔυશମͷݟ௨͕͠Α͘ͳͬͨɻ ɾGenericʹؔ࿈ͨ͠ॲཧΛॻ͖͘͢ͳͬͨɻ ɾमਖ਼ͷࡍʹݟΔ͖είʔϓ͕ڱ·ͬͨɻ ɾҰ࿈ͷViewControllerͷ݁߹͕Լ͕ͬͨ ɹ(ࢠ͕ؔͳ͘ͳͬͨͨΊ)ɻ ɾͨͩ͠ɺશମͱͯ͠ͷίʔυྔ͔ͳΓ૿͑ͨɻɻɻ
ͲΜͳίʔυ͕૿͔͑ͨ ɾಉ͡ػೳ͕ͩશͯͷΫϥεͰར༻͠ͳ͍ίʔυɻ ɹෳͷΫϥε͕ڠௐͯ͠1ͭͷػೳͱͳΔΑ͏ͳίʔυɻ ྫɿRepositoryͷૢ࡞Λߦ͍ɺͦͷ݁Ռͱͯ͠ViewΛߋ৽͢Δ ɾUIViewController͔ΒݺΕΔ͜ͱ͕લఏͱͳ͍ͬͯΔίʔυ ɹ(UIAlertControllerͳͲɻΧελϜViewʹدͤΔ͜ͱ͕Ͱ͖ͳ͍) ɾViewControllerͷͰ͋Δ͖ίʔυɻ ɹ(ViewɺModelɺViewModelͷશͯͱؔ͢Δ)
protocol extensionͷద༻ ɾෳͷViewControllerؒͰͷڞ௨ॲཧͷIFΛprotocolͱͯ͠ఆٛ ྫɿRepositoryΛૢ࡞͠ɺViewʹө͢Δϝιου ɹɹRepositoryͷΠϯελϯε(computed property) ɹɹViewͷΠϯελϯε(computed property) ɾprotocol extensionͰڞ௨ͷৼΔ͍Λ࣮
protocol extensionͷద༻ ɾ֤ViewControllerʹprotocolΛద༻ɻ ɹcomputed propertyʹɺ֤ViewControllerͷΠϯελϯεΛ ɹ͢ →࣮͔Βͯ͠ৼΔ͍Λڞ௨ԽͰ͖ͨʂ
·ͱΊ - ϥΠϒϥϦԽͯ͠ίʔυͷ࠶ར༻ੑΛߴΊͯ - ςετέʔεͷՃʹΑΓɺมߋڧͯ͘͠ - DIͳͲͰ݁߹Λ͘͠ɺ - దͳσβΠϯύλʔϯΛબͯ͠ϓϩδΣΫτͷෳࡶ͞Λݮ ͢Δ͜ͱͰSwift/iOSͷਐԽʹै͘͢͠ͳΔ͔ɻɻɻʁ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ
ࢀߟ ɾSwinject/Swinject ɹ(https://github.com/Swinject/Swinject)