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
Objective-Cで書かれたアプリをSwift化したときの話
Search
kuroyam
June 08, 2016
Programming
4
410
Objective-Cで書かれたアプリをSwift化したときの話
shibuya.swift #4
kuroyam
June 08, 2016
Tweet
Share
More Decks by kuroyam
See All by kuroyam
iOS13でもSwiftUIでLazyなGridを実装したい! / use SwiftUI on iOS13
kuroyam
1
1.1k
開発合宿で バーチャルオフィス を作ろうとしたお話 / Let's Babiniku !
kuroyam
0
2k
アプリ設計改善の旅路
kuroyam
1
960
途中からSwiftLint
kuroyam
1
610
Other Decks in Programming
See All in Programming
Multi Step Form, Decentralized Autonomous Organization
pumpkiinbell
1
660
CI改善もDatadogとともに
taumu
0
110
Writing documentation can be fun with plugin system
okuramasafumi
0
120
AWS Organizations で実現する、 マルチ AWS アカウントのルートユーザー管理からの脱却
atpons
0
130
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
5
3.8k
最近のVS Codeで気になるニュース 2025/01
74th
1
250
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
200
CNCF Project の作者が考えている OSS の運営
utam0k
5
690
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
340
Kanzawa.rbのLT大会を支える技術の裏側を変更する Ruby on Rails + Litestream 編
muryoimpl
0
220
Introduction to kotlinx.rpc
arawn
0
630
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
200
Featured
See All Featured
Code Review Best Practice
trishagee
66
17k
The Cult of Friendly URLs
andyhume
78
6.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Become a Pro
speakerdeck
PRO
26
5.1k
Producing Creativity
orderedlist
PRO
343
39k
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Unsuck your backbone
ammeep
669
57k
Transcript
Objective-CͰॻ͔Ε ͨΞϓϦΛSwiftԽ͠ ͨͱ͖ͷ @ shibuya.swift #4
͜Μʹͪ • ࠇా ॣ (@kuroyam) • GMOϖύϘגࣜձࣾ • ϞόΠϧΞϓϦͳΜͰ͞Μ •
ήʔϜ → Android → iOS
ࠓ͢͜ͱ
30daysAlbum • ࣸਅڞ༗αʔϏε • iOS൛ϦϦʔε2011 ( iOS4 ~ 5 )
• WebαʔϏεͱͯ͠2008͔Β • 20148݄͔Β͕iOS୲(1ਓ)
ΛSwiftԽͨ͠ͱ͖ͷʂ
ϓϥΠϕʔτͰSwiftॻ͍ͯΔ ͚ͲɺࣄͰObjective-Cॻ ͍ͯΔɾɾɾͬͯਓ͚Ͱ͢
1. େมͩͬͨ͜ͱ 2. ͏·͍ͬͨ͘͜ͱ 3. ޙչͯ͠Δ͜ͱ ͷ3ͭΛ͠·͢
ͦͷલʹɾɾɾ
͖͔͚ͬ • ϓϥΠϕʔτͰSwiftΛॻ͍͍ͯͨΒ Objective-C͕ͭΒ͘ͳ͖ͬͯͨ • Լ͕͍ͬͯ͘Ϟνϕʔγϣϯ • ૣ͘ՈʹؼͬͯSwiftॻ͖͍ͨ
Ͳ͏ͤiOS൛։ൃͯ͠Δͷ ҰਓͳΜͩ͠ɺউखʹͬͨ Β͍͍ͷͰʂ
ݱࡏͰ • 1ը໘Λআ͍ͯViewController͕Swiftʹͳͬͨ • ModelΫϥε΄΅ͯ͢Swiftʹͳͬͨ • ͦͷଞɺԿΒ͔ͷλεΫܥΫϥεͱ͔ϢʔςΟ ϦςΟܥΫϥεObjective-Cͷ··
݁Ռͱͯ͠ • ίʔυॻ͖͍͢ʂಡΈ͍͢ʂ • ։ൃupʂ • όά͕ݮͬͨɺग़ʹ͘͘ͳͬͨ • σϝϦοτಛʹແ͠
େมͩͬͨ͜ͱ
iOS7 • ࣌Γ͍͚ͨͲແࢹͰ͖ͳׂ͍߹ͰiOS7 Ϣʔβʔ͕͍ͨ • SwiftͷϥΠϒϥϦΛ͍͍ͨɾɾɾʂ • Objective-CCocoapodsͰɺSwift git submodule
ͰೖΕͨ
ΓͮΒ͍ͱ͜Ζ • Ϟϯελʔ ViewController • 1000ߦ͕͑Ұຕ͋Δ • ؔ࿈͢ΔViewଟ͍ͷͰ͕͔͔࣌ؒΔ • ModelΫϥε
• มߋͨ࣌͠ͷӨڹൣғ͕͍ͷͰ͜Θ͍ • ςετ͕ͳ͍ɾɾɾ
Ͳ͏͠Α͏ͳ͔ͬͨͭ • Objective-C͔ΒSwiftͷenumΛ͍͍ͨ • Objective-C͔ΒSwiftͷInt?ɺBool?Λࢀর͠ ͍ͨ • ٽ͘ٽ͘ϥούʔΛ࡞ͬͨ
͏·͍ͬͨ͘͜ͱ
View͔Β࢝ΊΔ • ৽نͰViewΛ࡞Δͱ͖ʹࢼ͠ʹSwiftͰॻ͍ͯ Έͨͷ͕࠷ॳ • ଞʹൺͯখ͘͞ɾૄ݁߹ • ػೳ։ൃͷؒʹখ͍͞View͔ΒͲΜͲΜSwift Խ
نେ͖Ίͷ༷มߋ͕͋ͬͨ • API࡞Γ͠ʂ • ΞϓϦଆͷModel࡞Γ͟͞ΔΛಘͳ͔ͬͨ • ͔ͤͬ͘ͳͷͰSwiftͰ… • λΠϛϯά͕Α͔͚ͬͨͩ…
ઃܭͷݟ͠Ͱ͖ͨ • ੲiOSք۾ͰઃܭͷΛ͢Δਓͬͯগͳ͔ͬ ͨ • ͳͷͰҾ͖ܧ͍ͩ࣌Ͱͷ͍͢͝ײ͡ͷ ίʔυʹͳͬͯͯͭΒ͔ͬͨ • ͪΌΜͱͨ͠ઃܭʹͤΔνϟϯε
ޙչͯ͠Δ͜ͱ
࠷ॳSwiftతʹ͍͍ॻ͖ํͰ ॻ͚ͳ͔ͬͨ
nilνΣοΫ͔Βͷforce unwrap if user != nil { user!.hoge() }
optional bindingͷ΄͏͕Α͍ if let user = user { user.hoge() }
// ͘͠ guard let user = user else { return } user.hoge()
ϧʔϓΛ·Θͯ͠ݕࡧ for product in products { if product.id == id
{ return product } }
ߴ֊ؔ͏ͱҰߦͰॻ͚Δ return products.filter{ $0.id == id }.first
͍͖ͳΓγϡοͱͨ͠ίʔυॻ ͚ͳ͍ • ΑΓΑ͍ॻ͖ํΛݟ͚ͭͨΒݹ͍ίʔυؚ Ίͯվળ͢ΔΑ͏ʹͯ͠Δ • ෳਓͰΔͳΒنͱ͔͋Δͱ໎͍ͳͯ͘ ศརͦ͏ • ૉৼΓେࣄ
ͱΓ͋͑ͣOptionalܕ
ͱΓ͋͑ͣOptionalܕʹ͠ͱ͜… class Book { var id: Int? var title: String?
var author: String? var createdAt: NSDate? . . . }
ࢀর͢Δͨͼʹ optional binding͢Δͷ ΊͬͪΌΊΜͲ͍ʂ
ۃྗOptionalܕʹ͠ͳ͍ • DBଆͰNotNullͳΒOptionalܕʹ͢Δඞཁͳ ͍ͷͰ • null͕ೖ͍ͬͯͨΒͦͦόάͩʂΈ͍ͨͳ ͷOptionalܕʹ͠ͳ͍΄͏͕͍͍͔ʁʁ • ྻۭͰॳظԽ͢Δ΄͏͕Αͦ͞͏
·ͱΊ
Swift͍͍ͧ • େ͖ͳΞϓϦ؆୯ʹSwiftԽͰ͖ͳ͍͔ ͠Εͳ͍͚ͲɺͰ͖Δͱ͔͜Β࢝Ί͍ͯ͜͏ • φͳݴޠͳͷͰָ͘͠ɺ҆શʹॻ͚ΔɻϞ νϕʔγϣϯͬͯ݁ߏॏཁ • ීஈϓϥΠϕʔτͰSwiftॻ͍ͯΔͱɺۀʹ ׆͔ͤͯͱͯΑ͍
ଞͷͱ͜ͷฉ͖͍ͨʂ • ͏ͪ͜͏ͨ͠Β͏·͍ͬͨ͘ʂͱ͔ • ͜͜ͰϋϚ͔ͬͨΒؾΛ͚ͭΖʂͱ͔ • ΈΜͳͰڠྗͯ͠SwiftͰָ͘͠ίʔσΟϯά ͍͖ͯ͠·͠ΐ͏ʂ