Suche senden
Hochladen
Himotoki: A type-safe JSON decoding library #関モバ
•
12 gefällt mir
•
4,999 views
Syo Ikeda
Folgen
関西モバイルアプリ研究会 #2での発表スライドです。
Weniger lesen
Mehr lesen
Ingenieurwesen
Melden
Teilen
Melden
Teilen
1 von 22
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
ObjectMapperでJSONマッピング
ObjectMapperでJSONマッピング
Syo Ikeda
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
SwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよ
Syo Ikeda
Dynamic frameworks tips
Dynamic frameworks tips
Syo Ikeda
Xcode and iTC submission topics
Xcode and iTC submission topics
Syo Ikeda
Swift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansai
Syo Ikeda
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
Empfohlen
ObjectMapperでJSONマッピング
ObjectMapperでJSONマッピング
Syo Ikeda
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
Syo Ikeda
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
SwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよ
Syo Ikeda
Dynamic frameworks tips
Dynamic frameworks tips
Syo Ikeda
Xcode and iTC submission topics
Xcode and iTC submission topics
Syo Ikeda
Swift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansai
Syo Ikeda
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
智治 長沢
Objective-C のアレはどこいったの?(Swift の話し
Objective-C のアレはどこいったの?(Swift の話し
Iwama Ryo
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Fumiya Sakai
Cmujp21_node-webkit
Cmujp21_node-webkit
Sugawara Ryousuke
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
Swiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていること
Shingo Sato
Refrection of kawasaki.rb
Refrection of kawasaki.rb
Aki Ariga
Apple watch対応アプリのポイントや基本実装・連携tips
Apple watch対応アプリのポイントや基本実装・連携tips
Fumiya Sakai
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Toshio Ehara
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
Yutaka Tachibana
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
Fumiya Sakai
Railsの現場に入る前のお話(勉強法)
Railsの現場に入る前のお話(勉強法)
Fumiya Sakai
Perlを書くときに意識していること
Perlを書くときに意識していること
良太 増子
無名関数のすすめ
無名関数のすすめ
Shoichi Kakizaki
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
Satoshi Takami
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
iOSのFileProtection
iOSのFileProtection
Yuichi Fujishige
SwiftLint
SwiftLint
Syo Ikeda
Weitere ähnliche Inhalte
Was ist angesagt?
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
智治 長沢
Objective-C のアレはどこいったの?(Swift の話し
Objective-C のアレはどこいったの?(Swift の話し
Iwama Ryo
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Fumiya Sakai
Cmujp21_node-webkit
Cmujp21_node-webkit
Sugawara Ryousuke
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
Swiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていること
Shingo Sato
Refrection of kawasaki.rb
Refrection of kawasaki.rb
Aki Ariga
Apple watch対応アプリのポイントや基本実装・連携tips
Apple watch対応アプリのポイントや基本実装・連携tips
Fumiya Sakai
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Toshio Ehara
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
Yutaka Tachibana
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
Fumiya Sakai
Railsの現場に入る前のお話(勉強法)
Railsの現場に入る前のお話(勉強法)
Fumiya Sakai
Perlを書くときに意識していること
Perlを書くときに意識していること
良太 増子
無名関数のすすめ
無名関数のすすめ
Shoichi Kakizaki
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
Satoshi Takami
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
今城 善矩
Was ist angesagt?
(20)
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
Objective-C のアレはどこいったの?(Swift の話し
Objective-C のアレはどこいったの?(Swift の話し
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Cmujp21_node-webkit
Cmujp21_node-webkit
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Swiftでの関数型プログラミングについて考えていること
Swiftでの関数型プログラミングについて考えていること
Refrection of kawasaki.rb
Refrection of kawasaki.rb
Apple watch対応アプリのポイントや基本実装・連携tips
Apple watch対応アプリのポイントや基本実装・連携tips
Swift事情2014夏 ~ Swift入門 beta6対応
Swift事情2014夏 ~ Swift入門 beta6対応
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
デザインにもこだわったUiの事始め3
デザインにもこだわったUiの事始め3
Railsの現場に入る前のお話(勉強法)
Railsの現場に入る前のお話(勉強法)
Perlを書くときに意識していること
Perlを書くときに意識していること
無名関数のすすめ
無名関数のすすめ
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
Andere mochten auch
iOSのFileProtection
iOSのFileProtection
Yuichi Fujishige
SwiftLint
SwiftLint
Syo Ikeda
20150826 RealmとHimotoki
20150826 RealmとHimotoki
Kei Ito
TIPS of Material Design
TIPS of Material Design
Takuji Nishibayashi
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
gyro_s
iOSのCI as a Service事情
iOSのCI as a Service事情
Hiroshi Maekawa
RxSwift x APIKit
RxSwift x APIKit
Kosuke Usami
Auto Layout の小技
Auto Layout の小技
Yuichi Fujishige
var RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swift
Syo Ikeda
Leak canaryで メモリリーク調査
Leak canaryで メモリリーク調査
baroqueworksdev
iOS 6 のAuto Rotation
iOS 6 のAuto Rotation
Yuichi Fujishige
CAKeyframeAnimation
CAKeyframeAnimation
Yuichi Fujishige
Audio QueueでSin波再生
Audio QueueでSin波再生
Yuichi Fujishige
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
How to handle bitcode
How to handle bitcode
Syo Ikeda
1画面から始めるStoryboard
1画面から始めるStoryboard
Yuichi Fujishige
What's new Swift3
What's new Swift3
toyship
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
MapR Technologies Japan
2016-10-25 product manager conference 資料
2016-10-25 product manager conference 資料
Takeo Iyo
Andere mochten auch
(20)
iOSのFileProtection
iOSのFileProtection
SwiftLint
SwiftLint
20150826 RealmとHimotoki
20150826 RealmとHimotoki
TIPS of Material Design
TIPS of Material Design
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
iOSのCI as a Service事情
iOSのCI as a Service事情
RxSwift x APIKit
RxSwift x APIKit
Auto Layout の小技
Auto Layout の小技
var RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swift
Leak canaryで メモリリーク調査
Leak canaryで メモリリーク調査
iOS 6 のAuto Rotation
iOS 6 のAuto Rotation
CAKeyframeAnimation
CAKeyframeAnimation
Audio QueueでSin波再生
Audio QueueでSin波再生
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
How to handle bitcode
How to handle bitcode
1画面から始めるStoryboard
1画面から始めるStoryboard
What's new Swift3
What's new Swift3
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
2016-10-25 product manager conference 資料
2016-10-25 product manager conference 資料
Ähnlich wie Himotoki: A type-safe JSON decoding library #関モバ
javascript を Xcode でテスト
javascript を Xcode でテスト
Yoichiro Sakurai
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207
Kanako Kobayashi
Swiftのクロージャー
Swiftのクロージャー
SatoTakeshi
jQueryで気をつけてほしいこと
jQueryで気をつけてほしいこと
良太 増子
Source kittenについて
Source kittenについて
佐藤 俊太郎
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
Shinichiro Yoshida
Creators'night#3今井
Creators'night#3今井
Daisuke Imai
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2
Kanako Kobayashi
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
陽平 山口
Obniz and cloud vision api
Obniz and cloud vision api
Kouhei Kido
Javaと小道具
Javaと小道具
Sho Ito
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
Tomoki Hasegawa
楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)
Kanako Kobayashi
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
Swiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったこと
yohei sugigami
Realm meet up #17
Realm meet up #17
Daisuke Nagata
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
Tomoki Hasegawa
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
Takashi Yoshinaga
Ähnlich wie Himotoki: A type-safe JSON decoding library #関モバ
(20)
javascript を Xcode でテスト
javascript を Xcode でテスト
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207
Swiftのクロージャー
Swiftのクロージャー
jQueryで気をつけてほしいこと
jQueryで気をつけてほしいこと
Source kittenについて
Source kittenについて
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
Creators'night#3今井
Creators'night#3今井
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Swift 2 (& lldb) シンポジウム
Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
Obniz and cloud vision api
Obniz and cloud vision api
Javaと小道具
Javaと小道具
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Swiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったこと
Realm meet up #17
Realm meet up #17
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
Himotoki: A type-safe JSON decoding library #関モバ
1.
Himotoki A"type'safe"JSON"decoding"library @ikesyo 関西モバイルアプリ研究会!#2,!2015(05(20!Wed #関モバ
2.
@ikesyo いけしょー/池田翔 京都でフリーランスのiOSエンジニア (時々Android)しています 現在はフリュー㈱のモバイル開発の チームにジョイン中。 Swi$もReac)veCocoaも使ってます。
3.
4.
Reac%veCocoaのコミッター(Contributor)やってます
5.
閑話休題
6.
Swi$でJSON(=>(オブジェクトの マッピングってどうしてますか?
7.
前回 Objec&ve(C時代の定番*=>*Mantle ObjectMapper
8.
9.
ObjectMapperもいいけど…… • オプショナルな"var"を使うのがいけてない class User:
Mappable { var username: String? var age: Int? var array: [AnyObject]? var group: Gruop? // 別の`Mappable`な型 required init?(_ map: Map) { mapping(map) } func mapping(map: Map) { username <- map["username"] age <- map["age"] array <- map["array"] group <- map["group"] } } class Group: Mappable { ... } • inoutパラメータでRealmとの相性が悪い
10.
もっとタイプセーフなJSONマッパーを
11.
ということで作りました
12.
Himotoki(紐解き)
13.
14.
Himotoki • h#ps://github.com/ikesyo/Himotoki • ObjectMapperとは違い、JSONのデコード(デシリアライズ) のみに特化 •
Argo>(h#ps://github.com/thoughtbot/Argo)>と同じ方向性 • Argoよりもより簡潔にモデル定義が行えるように • 外部依存なし(今のところは)
15.
Himotoki • プロトコルベースのAPI • 継承の必要なし •
class%も%struct%も使える。 • let%なプロパティのモデルも安全に扱える。 • 必要なJSONの要素が%nil%であればその時点でデコードを失敗させられる。 • 型推論による簡潔なモデル定義 • Argoのようなカリー化した%create()%メソッドは不要。
16.
Decodable public protocol Decodable
{ typealias DecodedType = Self static func decode(e: Extractor) -> DecodedType? }
17.
サンプルコード struct Group: Decodable
{ let name: String let floor: Int let optional: [String]? // MARK: Decodable static func decode(e: Extractor) -> Group? { // 関数(クロージャ)としてのイニシャライザ // `let create: ((name: String, floor: Int, optional: [String]?)) -> Group` と推論される。 let create = { Group($0) } // リスト全体がオプショナルの引数リストを生成する(22引数まで対応)。 // 途中で非オプショナルな引数に対して `nil` が出てきたら引数リストが `nil` になる。 // その引数リスト全体を `Optional.map()` に渡す。 // この場合 `build(a: String?, b: Int?, c: [String]??) -> (String, Int, [String]?)?` と推論される。 return build( e <| "name", e <| "floor", e <||? "optional" ).map(create) } }
18.
Argoだと struct Group: Decodable
{ let name: String let floor: Int let optional: [String]? static func create(name: String)(floor: Int)(optional: [String]?) -> Group { return Gruop(name: name, floor: floor, optional: optional) } // MARK: Decodable static func decode(j: JSON) -> Decoded<User> { return Gruop.create <^> j <| "name" <*> j <| "floor" <*> j <||? "optional" } }
19.
サンプルコード func testGroup() { var
JSON: [String: AnyObject] = [ "name": "Himotoki", "floor": 12 ] let g: Group? = decode(JSON) XCTAssert(g != nil) XCTAssert(g?.name == "Himotoki") XCTAssert(g?.floor == 12) XCTAssert(g?.optional == nil) JSON["name"] = nil let f: Group? = decode(JSON) XCTAssert(f == nil) }
20.
Operators 演算子は以下の6種類 // 以下 T:
Decodable <| // T <|? // T? <|| // [T] <||? // [T]? <|-| // [String: T] <|-|? // [String: T]?
21.
Himotoki'0.2'is'released'today!
22.
Welcome'your'contribu/ons!!'!
Jetzt herunterladen