Slide 1

Slide 1 text

Swift 4͔Β࣮૷͞ΕΔ Codable AKIBA.swift WWDCಛू

Slide 2

Slide 2 text

Profile Kazuya Ueoka Timers inc.ͷiOSΤϯδχΞ Twitter: @fromkk Github: fromkk Qiita: fromkk

Slide 3

Slide 3 text

ࢥ͍ग़ͦͷ1 • Apple Parkʹಥܸ͕ͨ͠ೖΕͳ͔ͬͨ

Slide 4

Slide 4 text

ࢥ͍ग़ͦͷ2 • ৯΂෺͕ͱʹ͔͘Ͱ͔͍

Slide 5

Slide 5 text

ࢥ͍ग़ͦͷ3 • Keynoteͷҝʹே5͔࣌ΒฒͿʢ7࣌ʹ͸ձ৔಺ʹೖΕͨͷͰפ ͞͸ҙ֎ͱେৎ෉ʣ

Slide 6

Slide 6 text

ࢥ͍ग़ͦͷ4 • ϐϯόονूΊΔͷָ͗͢͠Δ↗

Slide 7

Slide 7 text

What’s New in Foundation[212]ͱ͍ ͏ηογϣϯͰCodable ͱ͍͏ϓϩτίϧ͕ൃද

Slide 8

Slide 8 text

؆୯ʹݴ͏ͱܾ·ͬͨϑΥʔϚοτͷDataܕ͔Β Codable ʹ४ ڌͨ͠ܕʹม׵͠΍ͯ͘͘͢͠ΕΔ΋ͷ public protocol Encodable { public func encode(to encoder: Encoder) throws } public protocol Decodable { public init(from decoder: Decoder) throws } public typealias Codable = Decodable & Encodable

Slide 9

Slide 9 text

ରԠࡁΈEncoder JSON • JSONEncoder • JSONDecoder Plist • PropertyListEncoder • PropertyListDecoder

Slide 10

Slide 10 text

࢖͍ํ let jsonString = """ { "name": "AKIBA.Swift", "date": "2017-06-13T19:00:00+0900", "place": "Classmethod" } """ guard let jsonData: Data = jsonString.data(using: .utf8) else { fatalError() } struct Event: Codable { let name: String let date: Date let place: String } do { let decoder: JSONDecoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601 let event = try decoder.decode(Event.self, from: jsonData) print(event) //Event(name: "AKIBA.Swift", date: 2017-06-13 10:00:00 +0000, place: "Classmethod") } catch { print(error) }

Slide 11

Slide 11 text

!

Slide 12

Slide 12 text

ͪͳΈʹ

Slide 13

Slide 13 text

ωετ΋ग़དྷΔ let jsonString = """ { "name": "AKIBA.Swift", "date": "2017-06-13T19:00:00+0900", "place": "Classmethod", "organizers": [ {"name": "Danbo"}, {"name": "Koumei"}, ] } """ struct Event: Codable { let name: String let date: Date let place: String struct Organizer: Codable { let name: String } let organizers: [Organizer] }

Slide 14

Slide 14 text

Ωʔ໊͕ҧͬͯ΋େৎ෉ let jsonString = """ { "user_id": 12345, "created_at": "2017-06-03T10:00:00+0900", "updated_at": "2017-06-03T10:00:00+0900" } """ struct User: Codable { let userId: Int let createdAt: Date let updatedAt: Date private enum CodingKeys: String, CodingKey { case userId = "user_id" case createdAt = "created_at" case updatedAt = "updated_at" } }

Slide 15

Slide 15 text

ͦͷଞ • struct Λ Data Խͯ͠ϩʔΧϧʹอଘͨ͠Γ෮ݩͨ͠Γͱ͍ ͏ࣄ΋؆୯ʹͳΔ • dateDecodingStrategy ʹ .formatted Λར༻͢Ε͹೔ ෇ͷಠࣗύʔεػೳ͕࡞ΕΔ • Encoder ϓϩτίϧΛద߹͢Ε͹ಠࣗEncoder͕࣮૷ग़དྷΔ • Decoder ϓϩτίϧΛద߹͢Ε͹ಠࣗDecoder͕࣮૷ग़དྷΔ ࢀߟ

Slide 16

Slide 16 text

·ͱΊ • Swiftͷ৽ػೳͳͷͰiOSͷόʔδϣϯʹറΓ͕ແ͍ʢSwift 4ͰϏϧυ͍ͯ͠Ε͹աڈͷOSͰ΋ར༻ग़དྷΔʣ • ίϯύΠϥ͕Ϛοϐϯά෦෼Λࣗಈతʹߦͬͯ͘ΕΔͷͰهड़ ྔ͕গͳ͍ʢ͜Ε͕ؾ࣋ͪѱ͍ͱ͍͏੠΋Ұ෦ฉ͖·ͨ͠ʣ • ͱ͸͍͑ݸਓతʹ͔ͳΓخ͍͠ػೳͷ1ͭͳͷͰੵۃతʹ࢖ͬͯ ͍͖͍ͨͱࢥ͍ͬͯ·͢!

Slide 17

Slide 17 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠!