Slide 1

Slide 1 text

How to migrate to Swift 4 Daiki Matsudate,@d_date, iOS Freelancer Distribution GeekGarage

Slide 2

Slide 2 text

Daiki Matsudate,@d_date • iOS Freelancer • Supporting Realm as News Translator • Organizer of CLEM (announce later) • WWDC17 Attendee

Slide 3

Slide 3 text

Daiki Matsudate,@d_date • iOS Freelancer • Supporting Realm as News Translator • Organizer of CLEM (announce later) • WWDC17 Attendee

Slide 4

Slide 4 text

Agenda • How to migrate to Swift 4 using Xcode 9 Beta • [SE-0160] Limited @objc inference • [SE-0110] Distinguish between single-tuple and multiple-argument function types • Renamed some constants • Decodable

Slide 5

Slide 5 text

[SE-0160] Limited @objc inference • https://github.com/apple/swift-evolution/blob/master/ proposals/0160-objc-inference.md

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

@objc in future

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

"Minimal" migration workflow!

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

[SE-0110] Distinguish between single- tuple and multiple-argument function types

Slide 30

Slide 30 text

[SE-0110] Distinguish between single-tuple and multiple-argument function types ●Swift 3.1 ● Swift 4Ͱมߋ

Slide 31

Slide 31 text

Renamed some constants

Slide 32

Slide 32 text

NSAttributedStringKey • Renamed to enum • NSFontAttributedName -> NSAttributedStringKey.font • NSParagraphStyleAttributeName -> NSAttributedStringKey.paragraphStyle

Slide 33

Slide 33 text

NSAttributedStringKey let mStr = NSMutableAttributedString() mStr.addAttribute(.foregroundColor, value: UIColor.white, range: NSRange()) mStr.addAttributes([.font : UIFont()], range: NSRange())

Slide 34

Slide 34 text

NSAttributedStringKey let mStr = NSMutableAttributedString() mStr.addAttribute(.foregroundColor, value: UIColor.white, range: NSRange()) mStr.addAttributes([.font : UIFont()], range: NSRange()) "

Slide 35

Slide 35 text

NSAttributedStringKey let item = UIBarButtonItem() let attr = [NSAttributedStringKey.foregroundColor.rawValue : UIColor.white] item.setTitleTextAttributes(attr, for: .normal)

Slide 36

Slide 36 text

NSAttributedStringKey let item = UIBarButtonItem() let attr = [NSAttributedStringKey.foregroundColor.rawValue : UIColor.white] item.setTitleTextAttributes(attr, for: .normal) #

Slide 37

Slide 37 text

Structures in AVFoundation • AVLayerVideoGravityResizeAspectFill -> AVLayerVideoGravity.resizeAspectFill

Slide 38

Slide 38 text

Decodable • [SE-0166] Swift Archival & Serialization

Slide 39

Slide 39 text

[SE-0166] Swift Archival & Serialization • Codable (Encodable & Decodableͷtypealias)ͷಋೖ

Slide 40

Slide 40 text

[SE-0166] Swift Archival & Serialization • Codable (Encodable & Decodableͷtypealias)ͷಋೖ

Slide 41

Slide 41 text

Himotoki

Slide 42

Slide 42 text

Himotoki

Slide 43

Slide 43 text

Decodable

Slide 44

Slide 44 text

Decodable -> Himotoki.Decodable

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

GEEK GARAGE