Submit Search
Himotoki: A type-safe JSON decoding library #関モバ
12 likes
5,015 views
Syo Ikeda
関西モバイルアプリ研究会 #2での発表スライドです。
Engineering
Read more
1 of 22
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
More Related Content
PDF
ObjectMapperでJSONマッピング
Syo Ikeda
PDF
Carthageについて知りたいn個のこと
Syo Ikeda
PDF
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
PDF
SwiftでAndroidアプリ書けるってよ
Syo Ikeda
PDF
Dynamic frameworks tips
Syo Ikeda
PDF
Xcode and iTC submission topics
Syo Ikeda
PDF
Swift 1.2からSwift 2への移行 #cocoa_kansai
Syo Ikeda
PPTX
iOSでライブラリを提供する際に気をつけたいこと
asakahara
ObjectMapperでJSONマッピング
Syo Ikeda
Carthageについて知りたいn個のこと
Syo Ikeda
iOSでのFramework導入のおさらい #関モバ
Syo Ikeda
SwiftでAndroidアプリ書けるってよ
Syo Ikeda
Dynamic frameworks tips
Syo Ikeda
Xcode and iTC submission topics
Syo Ikeda
Swift 1.2からSwift 2への移行 #cocoa_kansai
Syo Ikeda
iOSでライブラリを提供する際に気をつけたいこと
asakahara
What's hot
(20)
PDF
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
智治 長沢
PDF
Objective-C のアレはどこいったの?(Swift の話し
Iwama Ryo
PDF
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Fumiya Sakai
PDF
Cmujp21_node-webkit
Sugawara Ryousuke
PDF
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
PDF
Swiftでの関数型プログラミングについて考えていること
Shingo Sato
PDF
Refrection of kawasaki.rb
Aki Ariga
PDF
Apple watch対応アプリのポイントや基本実装・連携tips
Fumiya Sakai
PDF
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
PDF
iPhoneアプリを Javaで書くよ?
Toshio Ehara
PDF
Ruby and I at 神奈川Ruby会議01
Yutaka Tachibana
PDF
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
PDF
デザインにもこだわったUiの事始め3
Fumiya Sakai
PDF
Railsの現場に入る前のお話(勉強法)
Fumiya Sakai
PDF
Perlを書くときに意識していること
良太 増子
PPTX
無名関数のすすめ
Shoichi Kakizaki
PDF
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
PDF
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
Satoshi Takami
PPTX
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
PDF
Swiftだめ自慢Beta5
今城 善矩
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
智治 長沢
Objective-C のアレはどこいったの?(Swift の話し
Iwama Ryo
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
Fumiya Sakai
Cmujp21_node-webkit
Sugawara Ryousuke
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
Swiftでの関数型プログラミングについて考えていること
Shingo Sato
Refrection of kawasaki.rb
Aki Ariga
Apple watch対応アプリのポイントや基本実装・連携tips
Fumiya Sakai
Swift事情2014夏 ~ Swift入門 beta6対応
Tomoki Hasegawa
iPhoneアプリを Javaで書くよ?
Toshio Ehara
Ruby and I at 神奈川Ruby会議01
Yutaka Tachibana
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
デザインにもこだわったUiの事始め3
Fumiya Sakai
Railsの現場に入る前のお話(勉強法)
Fumiya Sakai
Perlを書くときに意識していること
良太 増子
無名関数のすすめ
Shoichi Kakizaki
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
Satoshi Takami
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
Swiftだめ自慢Beta5
今城 善矩
Ad
Viewers also liked
(20)
PDF
iOSのFileProtection
Yuichi Fujishige
PDF
SwiftLint
Syo Ikeda
PDF
20150826 RealmとHimotoki
Kei Ito
PDF
TIPS of Material Design
Takuji Nishibayashi
PDF
かわいいKotlinでAndroidアプリをつくろう
gyro_s
PDF
iOSのCI as a Service事情
Hiroshi Maekawa
PDF
RxSwift x APIKit
Kosuke Usami
PDF
Auto Layout の小技
Yuichi Fujishige
PDF
var RAC3 = ReactiveCocoa + Swift
Syo Ikeda
PPTX
Leak canaryで メモリリーク調査
baroqueworksdev
PDF
iOS 6 のAuto Rotation
Yuichi Fujishige
PDF
CAKeyframeAnimation
Yuichi Fujishige
PDF
Audio QueueでSin波再生
Yuichi Fujishige
PDF
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
PDF
How to handle bitcode
Syo Ikeda
PDF
1画面から始めるStoryboard
Yuichi Fujishige
PDF
What's new Swift3
toyship
PDF
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
PDF
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
MapR Technologies Japan
PDF
2016-10-25 product manager conference 資料
Takeo Iyo
iOSのFileProtection
Yuichi Fujishige
SwiftLint
Syo Ikeda
20150826 RealmとHimotoki
Kei Ito
TIPS of Material Design
Takuji Nishibayashi
かわいいKotlinでAndroidアプリをつくろう
gyro_s
iOSのCI as a Service事情
Hiroshi Maekawa
RxSwift x APIKit
Kosuke Usami
Auto Layout の小技
Yuichi Fujishige
var RAC3 = ReactiveCocoa + Swift
Syo Ikeda
Leak canaryで メモリリーク調査
baroqueworksdev
iOS 6 のAuto Rotation
Yuichi Fujishige
CAKeyframeAnimation
Yuichi Fujishige
Audio QueueでSin波再生
Yuichi Fujishige
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
How to handle bitcode
Syo Ikeda
1画面から始めるStoryboard
Yuichi Fujishige
What's new Swift3
toyship
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
MapR Technologies Japan
2016-10-25 product manager conference 資料
Takeo Iyo
Ad
Similar to Himotoki: A type-safe JSON decoding library #関モバ
(20)
PDF
javascript を Xcode でテスト
Yoichiro Sakurai
PDF
Svgアニメーションを実装してみよう 20150207
Kanako Kobayashi
PDF
Swiftのクロージャー
SatoTakeshi
PPTX
jQueryで気をつけてほしいこと
良太 増子
PDF
Source kittenについて
佐藤 俊太郎
PPTX
React + FLUX + Redux + Redux Saga のお話
Shinichiro Yoshida
PDF
Creators'night#3今井
Daisuke Imai
PDF
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
PDF
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
PDF
Swiftビギナーズ倶楽部 vol.2
Kanako Kobayashi
PDF
オープンソースで作るスマホ文字認識アプリ
陽平 山口
PDF
Obniz and cloud vision api
Kouhei Kido
PDF
Javaと小道具
Sho Ito
PDF
Swiftのプロパティオブザーバを使い倒す
Tomoki Hasegawa
PDF
楽しいSwift!クラスと構造体を知る:)
Kanako Kobayashi
PDF
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
PDF
Swiftのアプリ開発でハマったこと
yohei sugigami
PDF
Realm meet up #17
Daisuke Nagata
PDF
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
Tomoki Hasegawa
PPTX
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
Takashi Yoshinaga
javascript を Xcode でテスト
Yoichiro Sakurai
Svgアニメーションを実装してみよう 20150207
Kanako Kobayashi
Swiftのクロージャー
SatoTakeshi
jQueryで気をつけてほしいこと
良太 増子
Source kittenについて
佐藤 俊太郎
React + FLUX + Redux + Redux Saga のお話
Shinichiro Yoshida
Creators'night#3今井
Daisuke Imai
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
Swift 2 (& lldb) シンポジウム
Yuichi Yoshida
Swiftビギナーズ倶楽部 vol.2
Kanako Kobayashi
オープンソースで作るスマホ文字認識アプリ
陽平 山口
Obniz and cloud vision api
Kouhei Kido
Javaと小道具
Sho Ito
Swiftのプロパティオブザーバを使い倒す
Tomoki Hasegawa
楽しいSwift!クラスと構造体を知る:)
Kanako Kobayashi
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
Swiftのアプリ開発でハマったこと
yohei sugigami
Realm meet up #17
Daisuke Nagata
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
Tomoki Hasegawa
A-Frameで始めるWebXRとハンドトラッキング (HoloLens2/Oculus Quest対応)
Takashi Yoshinaga
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も使ってます。
4.
Reac%veCocoaのコミッター(Contributor)やってます
5.
閑話休題
6.
Swi$でJSON(=>(オブジェクトの マッピングってどうしてますか?
7.
前回 Objec&ve(C時代の定番*=>*Mantle ObjectMapper
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(紐解き)
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!!'!
Download