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
1
2.3k
進化を続けるSwift-iOSに追随し続けるために
Kohei Tabata
August 29, 2016
Tweet
Share
More Decks by Kohei Tabata
See All by Kohei Tabata
営業活動なしで継続的に案件を受注する方法 / how to get a contract without sales as a freelance
nerd0geek1
2
830
生体データを取り扱うアプリ開発の勘所
nerd0geek1
1
81
動線改善とステータス可視化で家庭内のストレスを軽減した話
nerd0geek1
3
3.9k
家庭をプロジェクトとして運営した話
nerd0geek1
2
3.9k
fastlaneの勉強会を主催して学んだこと、得たこと、悩んだこと
nerd0geek1
1
930
みんなで育てるprecheck
nerd0geek1
1
590
matchとは?match導入のメリット
nerd0geek1
4
490
Improve your workflow with Sketch plugin
nerd0geek1
3
1.2k
Looking back try! Swift 2017
nerd0geek1
0
540
Other Decks in Programming
See All in Programming
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.6k
ONE WEDGE_company_guide
1wedge_one
0
370
Javaエンジニアのための Nodejs/Nuxt3入門
hidekatsu_izuno
0
280
今、知っておきたい! 生成AIエージェントの世界
elith
3
340
今の SmartHR にエンジニアで入社するとどうなるの?
daisukeshinoku
5
4.6k
Elm Form Validation
bkuhlmann
0
500
Milestoner
bkuhlmann
1
400
OpenTelemetry のサービスという概念について
azukiazusa1
2
1.1k
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
210
データアナリストが行うDatabricksを活用したETLの自動化事例
shinoa
0
250
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
100
Front-end application development, Symfony-style(s)
dunglas
2
1.9k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1023
450k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Building Effective Engineering Teams - LeadDev
addyosmani
27
1.8k
Designing for humans not robots
tammielis
247
25k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
321
20k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.5k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Imperfection Machines: The Place of Print at Facebook
scottboms
258
12k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Docker and Python
trallard
33
2.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
227
130k
Atom: Resistance is Futile
akmur
258
25k
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)