SlideShare a Scribd company logo
RealmとHimotoki
2015.8.26 関西モバイルアプリ研究会 #5
@itok_twit
@itok_twit
• いとうけい(itok)
• 公私共にプログラマ iOS / Mac(たまに Android や Windows)
• http://itok.jp/
Realm
SQLite / CoreData 置き換えデータベース
https://realm.io
Himotoki
最近話題のJSONマッパー
https://github.com/ikesyo/Himotoki
JSON→Himotoki→Realm
やってみた
{
"name": "groupA",
"persons": [
{
"name": "Francis Henry"
},
{
"name": "Williamson Sargent"
},
{
"name": "Vivian Henderson"
}
]
}
http://www.json-generator.com
サンプル
class Person : Object, Decodable {
dynamic var name: String = ""
dynamic var group: Group?
static func decode(e: Extractor) -> Person? {
return build(
e <| "name"
).map(Person.init)
}
init(_name: String) {
name = _name
super.init()
}
// Realm対応のために必要(Objectを継承しているので)
required init() {
super.init()
}
override init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
}
Person
class Group : Object, Decodable {
dynamic var name : String = ""
let persons = List<Person>() // ArrayじゃなくてList
static func decode(e: Extractor) -> Group? {
return build(
e <| "name",
e <|| "persons"
).map(Group.init)
}
init(_name: String, _persons: [Person]) {
name = _name
super.init()
// ここで関連付け
for person in _persons {
person.group = self
persons.append(person)
}
}
∼略∼
}
Group
guard let realm = try? Realm() else {
return
}
realm.write({ () -> Void in
if let group : Group = decode(json) {
realm.add(group)
}
})
let result = realm.objects(Person)
print(result.description)
実行
簡単!
複雑・巨大なJSONを
全部Realm化するのはちょっと・・・
JSONバイナリをRealmに格納
必要に応じてdecodeするのもあり
ところで
class MyObject : Object {
// didSetが使えないので2段階に構える
var jsonData : NSData {
set(newValue) {
jsonDataBacking = newValue // バイナリを格納
p_data = nil // JSONオブジェクトを初期化
}
get {
return jsonDataBacking
}
}
private dynamic var jsonDataBacking : NSData = NSData()
private var p_data : BigData?
// BigDataの取り出し口
var data : BigData? {
if p_data == nil { // バイナリから必要に応じて生成
if let json = try? NSJSONSerialization… {
p_data = decode(json)
}
}
return p_data
}
}
Realm + Himotoki
最高!

More Related Content

PDF
RxSwift x APIKit
PDF
Himotoki: A type-safe JSON decoding library #関モバ
PDF
20150228 Realm超入門
PDF
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
PDF
実践Realm
PDF
Realm meet up #17
PDF
Realmという衝撃
PDF
20151130 Apple Pencilを使う
RxSwift x APIKit
Himotoki: A type-safe JSON decoding library #関モバ
20150228 Realm超入門
書籍「軽量・高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
実践Realm
Realm meet up #17
Realmという衝撃
20151130 Apple Pencilを使う

More from Kei Ito (6)

PDF
20151028 アプリの権利を委譲する
PDF
20150930 3D Touchを試す
PDF
Cocoa勉強会関西 #54 Crash Report解析サービスを試してみた
PDF
Cocoa勉強会関西 #42 iOS5の小ネタ集
PDF
AssetsLibraryについて (iOS5対応版)
PDF
Cocoa勉強会関西#39 AssetsLibraryについて
20151028 アプリの権利を委譲する
20150930 3D Touchを試す
Cocoa勉強会関西 #54 Crash Report解析サービスを試してみた
Cocoa勉強会関西 #42 iOS5の小ネタ集
AssetsLibraryについて (iOS5対応版)
Cocoa勉強会関西#39 AssetsLibraryについて
Ad

20150826 RealmとHimotoki