Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Syo Ikeda
PDF, PPTX
5,021 views
Himotoki: A type-safe JSON decoding library #関モバ
関西モバイルアプリ研究会 #2での発表スライドです。
Engineering
◦
Read more
12
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 22
2
/ 22
3
/ 22
4
/ 22
5
/ 22
6
/ 22
7
/ 22
8
/ 22
9
/ 22
10
/ 22
11
/ 22
12
/ 22
13
/ 22
14
/ 22
15
/ 22
16
/ 22
17
/ 22
18
/ 22
19
/ 22
20
/ 22
21
/ 22
22
/ 22
More Related Content
PDF
ObjectMapperでJSONマッピング
by
Syo Ikeda
PDF
Carthageについて知りたいn個のこと
by
Syo Ikeda
PDF
iOSでのFramework導入のおさらい #関モバ
by
Syo Ikeda
PDF
SwiftでAndroidアプリ書けるってよ
by
Syo Ikeda
PDF
Dynamic frameworks tips
by
Syo Ikeda
PDF
Xcode and iTC submission topics
by
Syo Ikeda
PDF
Swift 1.2からSwift 2への移行 #cocoa_kansai
by
Syo Ikeda
PPTX
iOSでライブラリを提供する際に気をつけたいこと
by
asakahara
ObjectMapperでJSONマッピング
by
Syo Ikeda
Carthageについて知りたいn個のこと
by
Syo Ikeda
iOSでのFramework導入のおさらい #関モバ
by
Syo Ikeda
SwiftでAndroidアプリ書けるってよ
by
Syo Ikeda
Dynamic frameworks tips
by
Syo Ikeda
Xcode and iTC submission topics
by
Syo Ikeda
Swift 1.2からSwift 2への移行 #cocoa_kansai
by
Syo Ikeda
iOSでライブラリを提供する際に気をつけたいこと
by
asakahara
What's hot
PDF
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
by
智治 長沢
PDF
Objective-C のアレはどこいったの?(Swift の話し
by
Iwama Ryo
PDF
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
by
Fumiya Sakai
PDF
Cmujp21_node-webkit
by
Sugawara Ryousuke
PDF
Swiftによる関数型プログラミング超入門
by
Hisakuni Fujimoto
PDF
Swiftでの関数型プログラミングについて考えていること
by
Shingo Sato
PDF
Refrection of kawasaki.rb
by
Aki Ariga
PDF
Apple watch対応アプリのポイントや基本実装・連携tips
by
Fumiya Sakai
PDF
Swift事情2014夏 ~ Swift入門 beta6対応
by
Tomoki Hasegawa
PDF
iPhoneアプリを Javaで書くよ?
by
Toshio Ehara
PDF
Ruby and I at 神奈川Ruby会議01
by
Yutaka Tachibana
PDF
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
by
Kohei Taniguchi
PDF
デザインにもこだわったUiの事始め3
by
Fumiya Sakai
PDF
Railsの現場に入る前のお話(勉強法)
by
Fumiya Sakai
PDF
Perlを書くときに意識していること
by
良太 増子
PPTX
無名関数のすすめ
by
Shoichi Kakizaki
PDF
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
by
Shuji Watanabe
PDF
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
by
Satoshi Takami
PPTX
JavaScript使いのためのTypeScript実践入門
by
Shumpei Shiraishi
PDF
Swiftだめ自慢Beta5
by
今城 善矩
Java開発で活かしてほしいGit,CI,そして継続的デリバリー #jjug_ccc #ccc_r13
by
智治 長沢
Objective-C のアレはどこいったの?(Swift の話し
by
Iwama Ryo
NativeBaseをはじめとするUIに関する ライブラリを使ったサンプルを作ってみた
by
Fumiya Sakai
Cmujp21_node-webkit
by
Sugawara Ryousuke
Swiftによる関数型プログラミング超入門
by
Hisakuni Fujimoto
Swiftでの関数型プログラミングについて考えていること
by
Shingo Sato
Refrection of kawasaki.rb
by
Aki Ariga
Apple watch対応アプリのポイントや基本実装・連携tips
by
Fumiya Sakai
Swift事情2014夏 ~ Swift入門 beta6対応
by
Tomoki Hasegawa
iPhoneアプリを Javaで書くよ?
by
Toshio Ehara
Ruby and I at 神奈川Ruby会議01
by
Yutaka Tachibana
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
by
Kohei Taniguchi
デザインにもこだわったUiの事始め3
by
Fumiya Sakai
Railsの現場に入る前のお話(勉強法)
by
Fumiya Sakai
Perlを書くときに意識していること
by
良太 増子
無名関数のすすめ
by
Shoichi Kakizaki
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
by
Shuji Watanabe
JavaFXとRoboVMを使ってiOS上で動くアプリを試してみた
by
Satoshi Takami
JavaScript使いのためのTypeScript実践入門
by
Shumpei Shiraishi
Swiftだめ自慢Beta5
by
今城 善矩
Viewers also liked
PDF
iOSのFileProtection
by
Yuichi Fujishige
PDF
SwiftLint
by
Syo Ikeda
PDF
20150826 RealmとHimotoki
by
Kei Ito
PDF
TIPS of Material Design
by
Takuji Nishibayashi
PDF
かわいいKotlinでAndroidアプリをつくろう
by
gyro_s
PDF
iOSのCI as a Service事情
by
Hiroshi Maekawa
PDF
RxSwift x APIKit
by
Kosuke Usami
PDF
Auto Layout の小技
by
Yuichi Fujishige
PDF
var RAC3 = ReactiveCocoa + Swift
by
Syo Ikeda
PPTX
Leak canaryで メモリリーク調査
by
baroqueworksdev
PDF
iOS 6 のAuto Rotation
by
Yuichi Fujishige
PDF
CAKeyframeAnimation
by
Yuichi Fujishige
PDF
Audio QueueでSin波再生
by
Yuichi Fujishige
PDF
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
PDF
How to handle bitcode
by
Syo Ikeda
PDF
1画面から始めるStoryboard
by
Yuichi Fujishige
PDF
What's new Swift3
by
toyship
PDF
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
by
Hiroyuki Ohnaka
PDF
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
by
MapR Technologies Japan
PDF
2016-10-25 product manager conference 資料
by
Takeo Iyo
iOSのFileProtection
by
Yuichi Fujishige
SwiftLint
by
Syo Ikeda
20150826 RealmとHimotoki
by
Kei Ito
TIPS of Material Design
by
Takuji Nishibayashi
かわいいKotlinでAndroidアプリをつくろう
by
gyro_s
iOSのCI as a Service事情
by
Hiroshi Maekawa
RxSwift x APIKit
by
Kosuke Usami
Auto Layout の小技
by
Yuichi Fujishige
var RAC3 = ReactiveCocoa + Swift
by
Syo Ikeda
Leak canaryで メモリリーク調査
by
baroqueworksdev
iOS 6 のAuto Rotation
by
Yuichi Fujishige
CAKeyframeAnimation
by
Yuichi Fujishige
Audio QueueでSin波再生
by
Yuichi Fujishige
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
by
Syo Ikeda
How to handle bitcode
by
Syo Ikeda
1画面から始めるStoryboard
by
Yuichi Fujishige
What's new Swift3
by
toyship
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
by
Hiroyuki Ohnaka
Apache Drill で JSON 形式の オープンデータを分析してみる - db tech showcase Tokyo 2015 2015/06/11
by
MapR Technologies Japan
2016-10-25 product manager conference 資料
by
Takeo Iyo
Recently uploaded
PDF
2025/12/12 AutoDevNinjaピッチ資料 - 大人な男のAuto Dev環境
by
Masahiro Takechi
PDF
krsk_aws_re-growth_aws_devops_agent_20251211
by
uedayuki
PPTX
君をむしばむこの力で_最終発表-1-Monthon2025最終発表用資料-.pptx
by
rintakano624
PDF
音楽アーティスト探索体験に特化した音楽ディスカバリーWebサービス「DigLoop」|Created byヨハク技研
by
yohakugiken
PDF
ソフトとハードの二刀流で実現する先進安全・自動運転のアルゴリズム開発【DENSO Tech Night 第二夜】 ー高精度な画像解析 / AI推論モデル ...
by
dots.
PDF
ソフトウェアエンジニアがクルマのコアを創る!? モビリティの価値を最大化するソフトウェア開発の最前線【DENSO Tech Night 第一夜】
by
dots.
2025/12/12 AutoDevNinjaピッチ資料 - 大人な男のAuto Dev環境
by
Masahiro Takechi
krsk_aws_re-growth_aws_devops_agent_20251211
by
uedayuki
君をむしばむこの力で_最終発表-1-Monthon2025最終発表用資料-.pptx
by
rintakano624
音楽アーティスト探索体験に特化した音楽ディスカバリーWebサービス「DigLoop」|Created byヨハク技研
by
yohakugiken
ソフトとハードの二刀流で実現する先進安全・自動運転のアルゴリズム開発【DENSO Tech Night 第二夜】 ー高精度な画像解析 / AI推論モデル ...
by
dots.
ソフトウェアエンジニアがクルマのコアを創る!? モビリティの価値を最大化するソフトウェア開発の最前線【DENSO Tech Night 第一夜】
by
dots.
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