Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[SE-0160] Limiting @objc inference
Search
d_date
April 13, 2017
Programming
2
2.5k
[SE-0160] Limiting @objc inference
2017/04/13(木) Potatotips #39
d_date
April 13, 2017
Tweet
Share
More Decks by d_date
See All by d_date
TCA Practice in 5 min
d_date
2
1.7k
waiwai-swiftpm-part2
d_date
3
540
わいわいSwift PM part 1
d_date
2
430
What's new in Firebase 2021
d_date
2
1.5k
CI/CDをミニマルに構築する
d_date
1
600
Swift Package centered project - Build and Practice
d_date
20
15k
How to write Great Proposal
d_date
4
1.8k
Thinking about Architecture for SwiftUI
d_date
8
2.5k
Integrate your app to modern world in Niigata
d_date
0
700
Other Decks in Programming
See All in Programming
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
110
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
10
11k
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
160
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.4k
AIコーディングエージェント(skywork)
kondai24
0
130
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
6.5k
関数の挙動書き換える
takatofukui
4
770
CSC305 Lecture 17
javiergs
PRO
0
290
[SF Ruby Conf 2025] Rails X
palkan
0
460
無秩序からの脱却 / Emergence from chaos
nrslib
2
12k
AIコーディングエージェント(Gemini)
kondai24
0
170
CSC509 Lecture 14
javiergs
PRO
0
220
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
Building Applications with DynamoDB
mza
96
6.8k
Being A Developer After 40
akosma
91
590k
The Invisible Side of Design
smashingmag
302
51k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Thoughts on Productivity
jonyablonski
73
5k
Context Engineering - Making Every Token Count
addyosmani
9
470
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Embracing the Ebb and Flow
colly
88
4.9k
How GitHub (no longer) Works
holman
316
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Transcript
[SE-0160] Limiting @objc inference Daiki Matsudate (@d_date) potatotips #39
None
None
None
Agenda • ͱͯ140จࣈͰπΠʔτͰ͖ͳ͍ • [SE-0160] Limiting @objc inferenceʹ͍ͭͯ ͠·͢ɻ
[SE-0160] @objcਪͷ੍ݶ • https://github.com/apple/swift-evolution/ blob/master/proposals/0160-objc- inference.md
@objc in Swift 3.x • Objective-CͰݺͼग़ͤΔͷʹ͍ͭͯɺSwift ଆͰ໌ࣔతʹએݴͰ͖Δ • Θ͟Θ͟@objcΛॻ͔ͳ͍͍ͯ͘Α͏ʹ ਪͯ͘͠ΕΔ
@objc in Swift 3.x ͷ • Objective-CͰݺͼग़ͤΔͷʹ͍ͭͯɺSwift ଆͰ໌ࣔతʹએݴͰ͖Δ • Θ͟Θ͟@objcΛॻ͔ͳ͍͍ͯ͘Α͏ʹ
ਪͯ͘͠ΕΔ → աͰʁʁ
@objc in Swift 3.x ͷ • SwiftͷΫϥεObjective-CͷSelectorͷিಥΛ Ҿ͖ى͕ͪ͜͠
@objc in Swift 3.x ͷ • Swift API Design GuidelineʹԊͬͯॻ͍ͯɺ
Objective-CͰݺͼग़͢ͱ͖ʹObjective-C Coding Guidelineʹ͢Δ໊લʹม͞Ε͕ͪɻ ಛʹɺinitializerɺͦͷ໊લʹୈҰҾΛؚΊͳ ͍͚ͯ͘ͳ͍ͷͰɺ@objcඞ͚ͣͭΔ͜ͱʹ ͳΔɻ
• SwiftίϯύΠϥObjective-C Calling Convention͔ΒSwift Calling Conventionม ͢Δ"thunk"ϝιουΛ࡞ΔͨΊɺόΠφϦαΠζ ͕૿େ͢Δɻ @objc in
Swift 3.x ͷ
@objc in future
@objc in future Objective-CͰඞཁͳͱ͜Ζ͚ͩʹ@objcΛ ͚ͭΔΑ͏ʹਪΛݮΒ͢ ʲํʳ
Ҿ͖ଓ͖@objcΛਪ͢Δͷ 1.@objcͷ͍͍ͭͯΔએݴͷΦʔόʔϥΠυͷͱ͖
Ҿ͖ଓ͖@objcΛਪ͢Δͷ 2. @objcͷ͍ͭͨϓϩτίϧͷཁ݅Λຬͨ͢ͱ͖
Ҿ͖ଓ͖@objcΛਪ͢Δͷ 3. @IBOutlet,@IBActionଐੑ͕͍͍ͭͯΔͱ͖ 4. @NSManagedଐੑ͕͍͍ͭͯΔͱ͖ Interface BuilderͱͷΠϯλϥΫγϣϯ͕ Objective-CϥϯλΠϜͰߦΘΕΔͨΊ Core DataͱͷΠϯλϥΫγϣϯ͕
Objective-CϥϯλΠϜͰߦΘΕΔͨΊ
ՃͰ@objcΛਪ͢Δͷ 1. @GKInspectableଐੑ͕͍͍ͭͯΔͱ͖ 2. @IBInspectableଐੑ͕͍͍ͭͯΔͱ͖ GameplayKitͱͷΠϯλϥΫγϣϯ͕ Objective-CϥϯλΠϜͰߦΘΕΔͨΊ Interface BuilderͱͷΠϯλϥΫγϣϯ͕ Objective-CϥϯλΠϜͰߦΘΕΔͨΊ
@objcΛਪ͠ͳ͘ͳΔͷ 1. dynamic
@objcΛਪ͠ͳ͘ͳΔͷ 2. NSObject༝དྷͷΫϥε NSObjectΛܧঝ͍ͯ͠ΔΫϥεͰ͋ͬͯɺ @objcͳ͠ͰObjective-C͔Βݺͼग़ͤͳ͍ɻ
@objcΛਪ͠ͳ͘ͳΔͷ 2. NSObject༝དྷͷΫϥε extensionͰɺ@objcͳ͠ͰObjective-C͔Βݺͼ ग़ͤͳ͍ɻ
@objcMembersͷಋೖ XCTestͳͲɺΫϥεશମ͕@objcͰ͋Δ͜ͱ͕ٻΊΒ ΕΔࡍɺ@objcMembersΛ͚ͭΔ
@objcMembersͷಋೖ @objcMembersΛ͚ͭΔΫϥεɺObjecive-Cଆ Ͱ swift_objc_membersΛ͚ͭΔ
Extensionʹ͓͚Δ@objcͷON/OFF @nonobjcΛextensionʹ͚ͭΔ͜ͱͰɺ@objcͷ ର֎ͱ͢Δ͜ͱ͕Ͱ͖Δɻ
Swift 4Ҡߦͷͱ͖ Ͳ͏͢Ε͍͍ͷ…ʁ
"Minimal" migration workflow
Minimal migration workflow • Step 1: Swift 4ϞʔυͰɺ@objcਪ͞ΕͨՕॴͷ͢ ͯͷܯࠂΛղফ͢Δɻ
Minimal migration workflow • Step 2: SWIFT_DEBUG_IMPLICIT_OBJC_ENTRYPOINTΛ1ʙ3 ͷؒͷʹઃఆ͠ɺΞϓϦΛςετɻ 1.ΤϯτϦϙΠϯτͷݺग़ΛϝοηʔδͰه 2.ϩάΛͱΓɺόοΫτϨʔεΛൃߦ
3.όοΫτϨʔεͰه͠ɺΫϥογϡ͠·͢ɻ
Minimal migration workflow • Step 3: ͜ͷ࣌ͰɺSwift 4ʹҠߦՄೳɻSwift 4ΛϏϧ υ͢Δͱɺഇࢭ༧ఆͷϧʔϧʹج͍ͮͯ@objc
͕ਪଌ͞ΕͨΓͷέʔεͷObjective-CΤϯτ ϦϙΠϯτ͕আ͞ΕΔɻ
·ͱΊ • dynamic, NSObject༝དྷͷΫϥεͰ@objcਪ ͕͞Εͳ͘ͳΔ • @objcMembersʹΑΓclassશମʹ@objcΛదԠ Ͱ͖ΔΑ͏ʹͳΔ • @nonobjcΛextensionʹదԠ͢Δ͜ͱͰͦͷ
extension@objcͷదԠ֎ͱ͢Δ͜ͱ͕Ͱ͖Δ
એ
Thank you