Slide 1

Slide 1 text

[SE-0160] Limiting @objc inference Daiki Matsudate (@d_date) potatotips #39

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Agenda • ͱͯ΋140จࣈͰ͸πΠʔτͰ͖ͳ͍ • [SE-0160] Limiting @objc inferenceʹ͍ͭͯ ࿩͠·͢ɻ

Slide 6

Slide 6 text

[SE-0160] @objcਪ࿦ͷ੍ݶ • https://github.com/apple/swift-evolution/ blob/master/proposals/0160-objc- inference.md

Slide 7

Slide 7 text

@objc in Swift 3.x • Objective-CͰݺͼग़ͤΔ΋ͷʹ͍ͭͯɺSwift ଆͰ໌ࣔతʹએݴͰ͖Δ • Θ͟Θ͟@objcΛॻ͔ͳͯ͘΋͍͍Α͏ʹ ਪ࿦ͯ͘͠ΕΔ

Slide 8

Slide 8 text

@objc in Swift 3.x ͷ໰୊఺ • Objective-CͰݺͼग़ͤΔ΋ͷʹ͍ͭͯɺSwift ଆͰ໌ࣔతʹએݴͰ͖Δ • Θ͟Θ͟@objcΛॻ͔ͳͯ͘΋͍͍Α͏ʹ ਪ࿦ͯ͘͠ΕΔ → ա৒Ͱ͸ʁʁ

Slide 9

Slide 9 text

@objc in Swift 3.x ͷ໰୊఺ • SwiftͷΫϥε͸Objective-CͷSelectorͷিಥΛ Ҿ͖ى͕ͪ͜͠

Slide 10

Slide 10 text

@objc in Swift 3.x ͷ໰୊఺ • Swift API Design GuidelineʹԊͬͯॻ͍ͯ΋ɺ Objective-CͰݺͼग़͢ͱ͖ʹ͸Objective-C Coding Guidelineʹ൓͢Δ໊લʹม׵͞Ε͕ͪɻ ಛʹɺinitializer͸ɺͦͷ໊લʹୈҰҾ਺ΛؚΊͳ ͯ͘͸͍͚ͳ͍ͷͰɺ@objc͸ඞ͚ͣͭΔ͜ͱʹ ͳΔɻ

Slide 11

Slide 11 text

• SwiftίϯύΠϥ͸Objective-C Calling Convention͔ΒSwift Calling Convention΁ม׵ ͢Δ"thunk"ϝιουΛ࡞ΔͨΊɺόΠφϦαΠζ ͕૿େ͢Δɻ @objc in Swift 3.x ͷ໰୊఺

Slide 12

Slide 12 text

@objc in future

Slide 13

Slide 13 text

@objc in future Objective-CͰඞཁͳͱ͜Ζ͚ͩʹ@objcΛ ͚ͭΔΑ͏ʹਪ࿦ΛݮΒ͢ ʲํ਑ʳ

Slide 14

Slide 14 text

Ҿ͖ଓ͖@objcΛਪ࿦͢Δ΋ͷ 1.@objcͷ͍͍ͭͯΔએݴͷΦʔόʔϥΠυͷͱ͖

Slide 15

Slide 15 text

Ҿ͖ଓ͖@objcΛਪ࿦͢Δ΋ͷ 2. @objcͷ͍ͭͨϓϩτίϧͷཁ݅Λຬͨ͢ͱ͖

Slide 16

Slide 16 text

Ҿ͖ଓ͖@objcΛਪ࿦͢Δ΋ͷ 3. @IBOutlet,@IBActionଐੑ͕͍͍ͭͯΔͱ͖ 4. @NSManagedଐੑ͕͍͍ͭͯΔͱ͖ Interface BuilderͱͷΠϯλϥΫγϣϯ͕ Objective-CϥϯλΠϜͰߦΘΕΔͨΊ Core DataͱͷΠϯλϥΫγϣϯ͕ Objective-CϥϯλΠϜͰߦΘΕΔͨΊ

Slide 17

Slide 17 text

௥ՃͰ@objcΛਪ࿦͢Δ΋ͷ 1. @GKInspectableଐੑ͕͍͍ͭͯΔͱ͖ 2. @IBInspectableଐੑ͕͍͍ͭͯΔͱ͖ GameplayKitͱͷΠϯλϥΫγϣϯ͕ Objective-CϥϯλΠϜͰߦΘΕΔͨΊ Interface BuilderͱͷΠϯλϥΫγϣϯ͕ Objective-CϥϯλΠϜͰߦΘΕΔͨΊ

Slide 18

Slide 18 text

@objcΛਪ࿦͠ͳ͘ͳΔ΋ͷ 1. dynamic

Slide 19

Slide 19 text

@objcΛਪ࿦͠ͳ͘ͳΔ΋ͷ 2. NSObject༝དྷͷΫϥε NSObjectΛܧঝ͍ͯ͠ΔΫϥεͰ͋ͬͯ΋ɺ @objcͳ͠Ͱ͸Objective-C͔Βݺͼग़ͤͳ͍ɻ

Slide 20

Slide 20 text

@objcΛਪ࿦͠ͳ͘ͳΔ΋ͷ 2. NSObject༝དྷͷΫϥε extensionͰ͸ɺ@objcͳ͠Ͱ͸Objective-C͔Βݺͼ ग़ͤͳ͍ɻ

Slide 21

Slide 21 text

@objcMembersͷಋೖ XCTestͳͲɺΫϥεશମ͕@objcͰ͋Δ͜ͱ͕ٻΊΒ ΕΔࡍ͸ɺ@objcMembersΛ͚ͭΔ

Slide 22

Slide 22 text

@objcMembersͷಋೖ @objcMembersΛ͚ͭΔΫϥε͸ɺObjecive-Cଆ Ͱ swift_objc_membersΛ͚ͭΔ

Slide 23

Slide 23 text

Extensionʹ͓͚Δ@objcͷON/OFF @nonobjcΛextensionʹ͚ͭΔ͜ͱͰɺ@objcͷ ର৅֎ͱ͢Δ͜ͱ͕Ͱ͖Δɻ

Slide 24

Slide 24 text

Swift 4Ҡߦͷͱ͖͸ Ͳ͏͢Ε͹͍͍ͷ…ʁ

Slide 25

Slide 25 text

"Minimal" migration workflow

Slide 26

Slide 26 text

Minimal migration workflow • Step 1: Swift 4ϞʔυͰɺ@objcਪ࿦͞ΕͨՕॴͷ͢΂ ͯͷܯࠂΛղফ͢Δɻ

Slide 27

Slide 27 text

Minimal migration workflow • Step 2: SWIFT_DEBUG_IMPLICIT_OBJC_ENTRYPOINTΛ1ʙ3 ͷؒͷ஋ʹઃఆ͠ɺΞϓϦΛςετɻ 1.ΤϯτϦϙΠϯτ΁ͷݺग़ΛϝοηʔδͰه࿥ 2.ϩάΛͱΓɺόοΫτϨʔεΛൃߦ 3.όοΫτϨʔεͰه࿥͠ɺΫϥογϡ͠·͢ɻ

Slide 28

Slide 28 text

Minimal migration workflow • Step 3: ͜ͷ࣌఺ͰɺSwift 4ʹҠߦՄೳɻSwift 4ΛϏϧ υ͢Δͱɺഇࢭ༧ఆͷϧʔϧʹج͍ͮͯ@objc ͕ਪଌ͞Εͨ࢒ΓͷέʔεͷObjective-CΤϯτ ϦϙΠϯτ͕࡟আ͞ΕΔɻ

Slide 29

Slide 29 text

·ͱΊ • dynamic, NSObject༝དྷͷΫϥεͰ͸@objcਪ࿦ ͕͞Εͳ͘ͳΔ • @objcMembersʹΑΓclassશମʹ@objcΛదԠ Ͱ͖ΔΑ͏ʹͳΔ • @nonobjcΛextensionʹదԠ͢Δ͜ͱͰͦͷ extension͸@objcͷదԠ֎ͱ͢Δ͜ͱ͕Ͱ͖Δ

Slide 30

Slide 30 text

એ఻

Slide 31

Slide 31 text

Thank you