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

Swift Programming 始めました!

MagickWorX
December 27, 2017

Swift Programming 始めました!

仙台 IOS 勉強会 LT 資料 (2017/12/26)

MagickWorX

December 27, 2017
Tweet

Other Decks in Programming

Transcript

  1. Swift ͷศརͳʗྑ͍ͱ͜Ζ •Enum •OptionSet Protocol •Codable Protocol (since Swift 4)

    •ιʔείʔυͰ΍Γ͍ͨ͜ͱΛදݱ͠΍͍͢ •Objective-C ΑΓ΋࣮૷͠΍͍͢ ݴޠ࢓༷ϨϕϧͰ͸ ϓϩάϥϛϯάͰ͸
  2. EnumʢObjective-C ͷͱ͸ผ෺ʂʣ typedef NS_ENUM(Int, Fruits) { apple, orange, lemon }

    enum Fruits: Int { case apple case orange case lemon } Objective-C Swift var fruits: Fruits = .apple switch fruits { case .apple: case .orange: case .lemon: } Fruits fruits = apple; switch (fruits) { case apple: case orange: case lemon: } enum ಺ʹؔ਺΍ม਺Λهड़Մೳʂ
  3. OptionSet Protocolʢָʑ bitwiseʣ enum { one = 1 << 0,

    two = 1 << 1, three = 1 << 2 } Objective-C public struct OptValue: OptionSet { public let rawValue: Int public static let one = VaultAttributes(rawValue: 1 << 0) public static let two = VaultAttributes(rawValue: 1 << 1) public static let three = VaultAttributes(rawValue: 1 << 2) public init(rawValue: Int) { self.rawValue = rawValue } } Swift NSInteger val = three; if (val & one) { } else if (val & two) { } var opt: OptValue = .three opt.insert(.one) opt.contains(.two) opt.remove(.three)
  4. Codable Protocol (since Swift 4) [ { "year" : 2017,

    "cours" : 4, "summary" : "2017೥ळΞχϝ", "list" : [ { "title" : "͜ͷ͸ͳ៉ᩀ", "twitter" : "konohana_anime" }, { "title" : "ຐ๏࢖͍ͷՇ", "twitter" : "mahoyomeproject" }, … }, … ] struct Anime: Codable { let year: Int let cours: Int let summary: String struct List: Codable { let title: String let twitter: String } let list: [List] } do { let jsonDecoder = JSONDecoder() let anime = try jsonDecoder.decode([Anime].self, from: jsonData) } catch {} do { let encoder = JSONEncoder() let jsonData = try encoder.encode(anime) let jsonString = String(data: jsonData, encoding: .utf8)} catch {}
  5. ίϚϯυϥΠϯͰ Swift ϓϩάϥϜ͕࣮ߦՄೳ import Foundation struct iOSendai: Codable { let

    event: String let url: String let date: String let participants: String let location: String let sponsor: String let hashtag: String } func fetch() { let urlString = "http://iphone.magickworx.com/iosendai.json" if let url = URL(string: urlString) { let semaphore = DispatchSemaphore(value: 0) (URLSession.shared.dataTask(with: url) { (data, response, error) in if let jsonData = data { do { let decoder = JSONDecoder() let json = try decoder.decode(iOSendai.self, from: jsonData) dump(json) } catch let error { dump(error) } } semaphore.signal() }).resume() semaphore.wait() } } fetch() ιʔείʔυΛίϯύΠϧ % swiftc fetch.swift fetch ίϚϯυ͕࡞੒͞ΕΔͷͰ࣮ߦ % ./fetch
  6. ·ͱΊ • Swift 4 Λ࢖͏ͱ Objective-C ʹ͸໭Εͳ͍Α • Ͱ΋จࣈྻॲཧ͚ͩ͸ϋϚΔΑ •

    ίϚϯυϥΠϯͰ΋ಈ͘ͷͰ RESTful API ͷಈ࡞ݕূʹศར • Swift Ͱϓϩάϥϛϯά͢Δͷ͸ָ͍͠ʂ
  7. ͓·͚ʢͦͷ1ʣ • APNs ͷઃఆ͕ূ໌ॻ͔Β Auth Key ͷར༻ʹมߋ͞Ε͍ͯͨ • Auth Key

    ͸Ұ౓ൃߦͨ͠Β༗ޮظݶͳ͠ ຖ೥ͷߋ৽࡞ۀ͕ෆཁʢ͔ͩΒݫॏʹอ؅͢Δඞཁ͕͋Δʣ • Google Firebase Ͱ͸ Auth Key ʹରԠ͍ͯ͠Δ • iOS Developer Center ͷ Certificates, Identifiers & Profiles ͷ Keys ͰൃߦͰ͖ΔΑ • ৽نΞϓϦͷ APNs ʹ͸ Auth Key Λ࢖͓͏ʂ
  8. ͓·͚ʢͦͷ2ʣ ʢhttps://pechat.jp/ʣΛߪೖͨ͠ ৺Λ௨ΘͤΔɺ ͓͠Ό΂ΓϘλϯɻ • খ͞ͳࢠڙ޲͚ͷίϯηϓτͷ঎඼ • App Store ʹ

    Pechatʢϖνϟοτʣ໊ͷΞϓϦ͕͋Δ • Ͱ΋ͨͩͷ Bluetooth εϐʔΧʔͩͬͨ • ͳͷͰ Raspberry Pi 3 ͷ֎෦εϐʔΧʔʹར༻Ͱ͖ͦ͏