Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[SE-0160] Limiting @objc inference

d_date
April 13, 2017

[SE-0160] Limiting @objc inference

2017/04/13(木) Potatotips #39

d_date

April 13, 2017
Tweet

More Decks by d_date

Other Decks in Programming

Transcript

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

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. @objc in future

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. "Minimal" migration
    workflow

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. એ఻

    View Slide

  31. Thank you

    View Slide