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
[SE-0160] Limiting @objc inference
Search
d_date
April 13, 2017
Programming
2.6k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[SE-0160] Limiting @objc inference
2017/04/13(木) Potatotips #39
d_date
April 13, 2017
More Decks by d_date
See All by d_date
TCA Practice in 5 min
d_date
2
1.9k
waiwai-swiftpm-part2
d_date
3
600
わいわいSwift PM part 1
d_date
2
490
What's new in Firebase 2021
d_date
2
1.6k
CI/CDをミニマルに構築する
d_date
1
630
Swift Package centered project - Build and Practice
d_date
20
17k
How to write Great Proposal
d_date
4
2.3k
Thinking about Architecture for SwiftUI
d_date
8
2.5k
Integrate your app to modern world in Niigata
d_date
0
750
Other Decks in Programming
See All in Programming
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
680
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
370
プロポーザルを書いてもらう
pvcresin
0
480
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
110
Cloudflare is Agents
chimame
0
160
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
220
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
780
Go 1.27 における memory allocation の高速化
andpad
0
160
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
690
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
180
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
410
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
200
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
The Limits of Empathy - UXLibs8
cassininazir
1
600
Accessibility Awareness
sabderemane
1
170
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