Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
API Design in Swift
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
FUJI Goro
June 20, 2014
Programming
1.8k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
API Design in Swift
#WWDCPAD の発表資料です
http://connpass.com/event/6877/
FUJI Goro
June 20, 2014
More Decks by FUJI Goro
See All by FUJI Goro
ステートレスなLLMでステートフルなAI agentを作る - YAPC::Fukuoka 2025
gfx
7
2.1k
How to Boost Your Code with WebAssembly
gfx
2
3.2k
AssemblyScriptでライブラリコードの高速化をしてみる
gfx
5
3.4k
実践TypeScriptトークバトル
gfx
1
1.3k
歴史的経緯の説明 as code
gfx
7
2.9k
Elasticsearchによる 全文検索の実装 in Rails
gfx
6
9.9k
すばらしきGraphQLのSEKAIへようこそ
gfx
20
10k
マルチテナント・ウェブアプリケーションの実践
gfx
14
9.9k
How to choose the ORM on Android
gfx
1
4.5k
Other Decks in Programming
See All in Programming
phperだってパンチカードでコーディングしたい
o0h
PRO
0
330
残高管理から台帳サービスへの進化
artoy
1
200
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
ChromeでローカルLLM
ryu1013
0
140
APNsからLive Activityを開始する話
yumnumm
0
170
golang-bob.pdf
iwatsukayura
0
130
最近”作らせてる” ローカルAIアプリの話
akit37
0
470
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
210
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
ジョジョの世界をXRで再現する
mofurune
0
160
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
300
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
So, you think you're a good person
axbom
PRO
2
2.2k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Embracing the Ebb and Flow
colly
88
5.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
Building Applications with DynamoDB
mza
96
7.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Transcript
API Design In Swift #WWDCPAD FUJI Goro (@__gfx__), a software
engineer in COOKPAD WWDC2014 reports at COOKPAD, 2014/6/20
FUJI Goro (@__gfx__) • Software engineer @ COOKPAD Inc. •
Development common libraries for Android / iOS
We are hiring! https://info.cookpad.com/jobs/
Comparison of Swift and Objective-C
Swiftݴޠ༷ͷৄࡉʹ৮Ε·ͤΜ
SwiftͱObjective-Cͷൺֱ • ΞΫηε੍ޚ • ϝιουݺͼग़͠ߏจ • Φʔόʔϩʔυͱ໊લ͖Ҿ • ૯শతϓϩάϥϛϯά
ΞΫηε੍ޚ • Objective-Cެ։ϝιουͷΈϔομϑΝΠϧʹ ॻ͘ • ϑΟʔϧυʹΞΫηε͢Δͷݪଇېࢭ • Swift͕ͯ͢publicͰϑΟʔϧυΞΫηεࣗ༝ • ΞΫηείϯτϩʔϧΛ͢Δʹinterfaceͱ࣮Ϋ
ϥεΛ͚Δ͜ͱͰରԠͰ͖Δ͕࣮ίετ͕ߴ͍
ϝιουݺͼग़͠ߏจ • Objective-C: [[receiver method1] method2] • Swift: receiver.method1().method2() •
ϝιουνΣΠϯ͕Γ͍͢ • ࠷ޙͷҾ͕ؔܕͩͱಛघͳߏจ͋Γ • “trailing closures” • receiver.method() { params-> Type in … }
Φʔόʔϩʔυͱ໊લ͖Ҿ • γάωνϟ͕ҧ͑ಉ໊͡લͷϝιουΛෳ ఆٛͰ͖Δ • ύϥϝλͷܕ͕ҧ͑OK • Ҿͷܕ͕ҧͬͯOK • ໊લ͖ΦϓγϣφϧҾఆٛՄೳ
૯শతϓϩάϥϛϯά • ܕύϥϝʔλΛͱΔΫϥεϝιουΛఆٛ Ͱ͖Δ • δΣωϦΫεͱ͔ςϯϓϨʔτͱ͔͍ΘΕ Δͷ • ͨͱ͑ Array<T>
ʮҙͷܕTͷྻʯ
ͦͷଞ • Ϋϥεϝιουʢstatic methodʣଘࡏ͠ͳ͍ • ൃදͰఆٛͰ͖ͳ͍ͱݴͬͯ͠·͍·͕ͨ͠ɺ class funcͰఆٛͰ͖·͢ʢthanks to @corosuke_kʣ
• ԋࢉࢠΦʔόʔϩʔυ͕͋Δ • nilΛσϑΥϧτͰڐ༰͠ͳ͍ • nilڐ༰ܕ T? ͱ T!
Swiftʹ͋Δ੍ݶ • ϦϑϨΫγϣϯAPI • ͦΕΒ͖͠API͋ΔͷͰɺਖ਼نϦϦʔε· ͰʹՃ͞ΕΔՄೳੑ͋Γ • performSelectorܥͷಈతϝιουݺͼग़͠ • ObjCʹexportͨ͠Ϋϥεʹରͯ͠ͷΈՄೳ
Interoperability of Swift and Objective-C
՝ • Objective-CΞϓϦͰSwiftϥΠϒϥϦΛ͑ Δ͔ɺ͑Δͱͨ͠ΒͲ͏͍͏͕ඞཁ͔ • SwiftΞϓϦͰObjective-CϥΠϒϥϦΛ͑ Δ͔ɺ͑Δͱͨ͠ΒͲ͏͍͏͕ඞཁ͔
૬ޓӡ༻ͷݪଇ • Swift͔ΒObjective-Cͷݺͼग़͠: Մೳ • Objective-C͔ΒSwiftͷݺͼग़͠: Մೳ • ͍ͣΕઃఆ͕ඞཁ •
ΠϯλʔϑΣΠε100%ޓͰͳ͍
Objective-C from Swift • Objective-C APIΛSwift͔Β͏ͨΊͷϒϦο δXcode͕ࣗಈతʹੜͯ͘͠ΕΔ • Swift͔Βݟ͑ΔCocoa APIͷ΄ͱΜͲͦͷ
··͏͜ͱ͕Ͱ͖Δ • String, Array, DictionaryObjCͦͷ··
Blocks • ObjCͷblocksSwiftͷؔܕʹͳΔ • ϝιουؔͷ࠷ޙͷҾ͕blocksͩͱɺ trailing closuresߏจ͕͑Δ • RubyͰಋೖ͞Εͯ͘ΒΕΔΑ͏ʹͳͬ ͨϒϩοΫϝιουߏจͱ͓ͳ͡
Example func dispatch_async(queue: dispatch_queue_t!, block: dispatch_block_t!) ! // trailing closures
(ඌΫϩʔδϟʣ ! dispatch_async(dispatch_get_main_queue()) { NSLog(“foo”) } ! // ௨ৗͷߏจͰ͑Δ ! dispatch_async(dispatch_get_main_queue(), { NSLog("foo") }) !
Objective-CͷͨΊͷSwift • SwfitͰఆٛͨ͠ΫϥεΛObjective-CͰ͏ͨ ΊͷϒϦοδXcode͕ࣗಈੜ͢Δ • @objc ΞϊςʔγϣϯΛ͚ͭΔɺ·ͨ NSObjectΛܧঝͨ͠Ϋϥε͕ࣗಈతʹObjC ଆʹexport͞ΕΔ
ҙ • ϝιουͷΦʔόʔϩʔυԋࢉࢠΦʔόʔ ϩʔυͳͲɺObjCͰ࣮ݱͰ͖ͳ͍ػೳΤΫ εϙʔτͰ͖ͳ͍ • ʮObjCରԠSwiftϥΠϒϥϦʯಛผͷରԠ͕ ඞཁͰɺͦΕʹΑͬͯSwiftຊདྷͷύϑΥʔϚ ϯεΛൃشͰ͖ͳ͍Մೳੑ͕͋Δ
API Design
Swift࣌ͷAPIઃܭ • SwiftObjective-CΑΓڧྗ͕ͩɺશ໘తʹ SwiftʹҠߦ͢Δʹ·͔͔ͩΔͩΖ͏ • ͜Ε͔ΒͷॏཁͳͷɺʮObjective-C͔ Β͑ΔSwiftϥΠϒϥϦʯ͓ΑͼʮSwiftͰ ͍͍͢Objective-CϥΠϒϥϦʯͩʂ
SwiftϥΠϒϥϦΛॻ͘ݪଇ • public classΛObjCʹexport͢Δ • 3จࣈϓϨϑΟΫεґવͱͯ͠ඞཁͱࢥΘΕΔ • export͢ΔclassͰ੍ݶ͕͋Δ͜ͱʹҙ • ΦʔόʔϩʔυΛ͑ͳ͍
• δΣωϦΫεΛ͑ͳ͍
Objective-CΛॻ͘ݪଇ • มߋͦΕ΄Ͳͳ͍ • Cocoaࢿ࢈Λͦͷ··͔ͭ͏ͨΊʹ͔ͳΓ͍ͯ͠Δҹ • ෳͷblocksΛड͚औΔͷͰͳ͘ɺ࠷ޙͷҾͰҰ͚ͭͩ blocksΛड͚औΔΑ͏ʹ͢Δ • ެ։APIͰͷϦϑϨΫγϣϯආ͚Δ
• ͨͱ͑SELΛड͚औͬͯϝιουΛൃߦ͢ΔͷͰͳ͘ɺ blocksΛ͏
ҙ • ਖ਼ن൛Ͱطଘͷ੍ݶʹ͍ͭͯมߋ͕͋Δͱ ࢥΘΕΔͷͰɺಛʹϦϑϨΫγϣϯϒϦο δ·ΘΓݱࡏͷ༷Λ৴͗͢͡ͳ͍΄͏͕ Α͍͔
Show Notes • Welcome Swift • The Swfit Programming Language
• Using Swift with Cocoa and Objective-C
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠