Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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 Henderso...
class Person : Object, Decodable {
dynamic var name: String = ""
dynamic var group: Group?
static func decode(e: Extractor...
class Group : Object, Decodable {
dynamic var name : String = ""
let persons = List<Person>() // ArrayじゃなくてList
static fun...
guard let realm = try? Realm() else {
return
}
realm.write({ () -> Void in
if let group : Group = decode(json) {
realm.add...
複雑・巨大なJSONを
全部Realm化するのはちょっと・・・
JSONバイナリをRealmに格納
必要に応じてdecodeするのもあり
ところで
class MyObject : Object {
// didSetが使えないので2段階に構える
var jsonData : NSData {
set(newValue) {
jsonDataBacking = newValue // バイ...
Realm + Himotoki
最高!
Upcoming SlideShare
Loading in …5
×

20150826 RealmとHimotoki

2,385 views

Published on

関西モバイルアプリ研究会 #5
「RealmとHimotoki」の資料です

Published in: Software
  • Be the first to comment

20150826 RealmとHimotoki

  1. 1. RealmとHimotoki 2015.8.26 関西モバイルアプリ研究会 #5 @itok_twit
  2. 2. @itok_twit • いとうけい(itok) • 公私共にプログラマ iOS / Mac(たまに Android や Windows) • http://itok.jp/
  3. 3. Realm SQLite / CoreData 置き換えデータベース https://realm.io
  4. 4. Himotoki 最近話題のJSONマッパー https://github.com/ikesyo/Himotoki
  5. 5. JSON→Himotoki→Realm やってみた
  6. 6. { "name": "groupA", "persons": [ { "name": "Francis Henry" }, { "name": "Williamson Sargent" }, { "name": "Vivian Henderson" } ] } http://www.json-generator.com サンプル
  7. 7. 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
  8. 8. 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
  9. 9. 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) 実行 簡単!
  10. 10. 複雑・巨大なJSONを 全部Realm化するのはちょっと・・・ JSONバイナリをRealmに格納 必要に応じてdecodeするのもあり ところで
  11. 11. 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 } }
  12. 12. Realm + Himotoki 最高!

×