狠狠撸
Submit Search
書籍「軽量?高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
?
0 likes
?
862 views
Yu Sugawara
Follow
iPhone Dev Sapporo勉強会 Mar, 2017
Read less
Read more
1 of 39
Download now
Download to read offline
More Related Content
書籍「軽量?高速モバイルデータベース Realm入門」を使って学ぶRealmの勘所
1.
軽量?高速モバイルデータベース Realm入門を使って学ぶRealmの勘所 DevSap勉強会 17/03/26
2.
菅原 祐 @yusuga_
3.
Aplos for Twitter
4.
搁别补濒尘の本を书きました!
5.
軽量?高速モバイルデー タベ ー ス Re?alm 入門 菅原祐蕃 Realm岸川克己監修 「Swift」と 「Realm
Mobile Database」 によるiOSアプリ開発を 徹底解説! 区モバイルデー タペー スを使ったことがない方 図「SQ Lite」や「Core Data」から置き換えたい方 区より実践的な使用方法を知りたい方 にオススメ! 授術評編社
6.
本日のテーマ
7.
本日のテーマ 1. 軽量?高速モバイルデータベース Realm入門を使って学ぶRealmの勘所
8.
本日のテーマ 1. 軽量?高速モバイルデータベース Realm入門を使って学ぶRealmの勘所 2. サンプルからRealmの概要を掴む
9.
サンプルDL (195MB) 1. Google検索:
realm入門 2. 軽量?高速モバイルデータベース Realm入門:書籍案内|技術 評論社 3. 本書のサポートページ
10.
書籍「軽量?高速モバイルデータベー ス Realm入門」を使って学ぶRealmの 勘所
11.
Realmとは (前書き) ? 世界初のモバイルファーストなデータベース ?
2016年5月にバージョン1.0がリリース ? 最新は2017年3月13日にリリースされたv2.4.4 ? 本書は、v2.4.2をサポート Swift 3.0.2
12.
Realmの特徴 (p007) ? クラス定義
== モデル定義(テーブル定義) ? DBの非同期処理をサポート ? 高速 (p009) ? 独自のストレージエンジン(C++)
13.
Realmの特徴 (p007) ? マルチプラットフォーム
(p010) ? iOS (Swift, Objective-C) ? Android (Java, Kotlin) ? React Native (JavaScript) ? Xamarin (C#) ? データベースファイルは完全なマルチプラットフォームをサポー ト ? iOSで作ったRealmファイルをAndroidで開くことも可能
14.
Realmの特徴 (p007) ? 日本語で問い合わせ可能なユーザサポートの窓口
(p011) ? Slack ? Realm Japan User Group (Facebook) ? OSS (p012) ? realm-cocoa ? realm-core
15.
Realmのインストール (p014) ? Dynamic
Framework ? CocoaPods ? Carthage
16.
モデル定義 (p027) import RealmSwift class
Person: Object { // RealmSwift.Objectクラスを継承 dynamic var name = "" // String型 let dogs = List<Dog>() // 1対多の関連 } class Dog: Object { dynamic var name = "" dynamic var age = 0 }
17.
モデル定義チートシート (p272) ? 非オプショナル型/オプショナル型 ?
1対1/1対多/逆方向の関連 ? プライマリキーの指定 ? インデックスの指定 ? 保存しないプロパティの指定 ? 暗黙的に保存しないプロパティ
18.
モデルオブジェクトの生成と初期化 3種類 (p035) 1.
プロパティ値 let dog = Dog() dog.name = "Momo" dog.age = 9
19.
モデルオブジェクトの生成と初期化 3種類 (p035) 2.
KVCに準拠しているオブジェクトで初期化 let dog = Dog(value: ["name": "Momo", "age": 9])
20.
モデルオブジェクトの生成と初期化 3種類 (p035) 3.
各プロパティの値の配列で初期化 let dog = Dog(value: ["Momo", 9])
21.
モデルオブジェクトの追加 (p039) let realm
= try! Realm() // このrealmインスタンスを使いデータベースの操作を行う // 書き込みトランザクション realm.beginWrite() realm.add(mydog) // モデルオブジェクトの追加 try! realm.commitWrite()
22.
モデルオブジェクトの取得 (p055) let results
= realm.objects(Dog.self) // すべてのDogオブジェクト .?lter("name CONTAINS 'x'") // nameにxを含む
23.
自動更新 (p069) let realm
= try! Realm() // デフォルトRealmを取得 // resutlsを生成 let results = realm.objects(Cat.self) // Catモデルオブジェクト .?lter("age >= 5") // 5歳以上 .sorted(byKeyPath: "age", ascending: true) // ageで昇順ソート // データベースにCatがないので、resultsは0件です。 print("results.count: (results.count)") // 0
24.
自動更新 (p069) // cat1を加えます。ageは1です。 let
cat1 = Cat(value: ["name": "Toto", "age": 1]) try! realm.write { realm.add(cat1) } // データベースにCatは1件あるのですが、 // cat1.ageが5未満なのでresultsは変わらず0件です。 print("results.count: (results.count)") // 0
25.
自動更新 (p069) // cat1.ageを10に変更します。 try!
realm.write { cat1.age = 10 } // cat1が5歳以上の条件にマッチしたので、 // resultsにcat1が自動で追加されます。 print("results: (results)") // [cat1]
26.
自動更新 (p069) // cat2を追加します。ageは5です。 let
cat2 = Cat(value: ["name": "Rao", "age": 5]) try! realm.write { realm.add(cat2) } // cat2は5歳以上の条件にマッチしているので、 // resultsにcat2が自動で追加されます。 // ageで昇順ソートもされています。 print("results: (results)") // [cat2, cat1]
27.
自動更新 (p069) // cat2を削除します。 try!
realm.write { realm.delete(cat2) } // cat2がデータベースから削除されたので、 // resultsからcat2が自動で取り除かれます。 print("results: (results)") // [cat1]
28.
マルチスレッド (p074) // マルチスレッドでデータベースにアクセス DispatchQueue.global().async { //
デフォルトRealmを取得 let realm = try! Realm() // モデルオブジェクトの生成 let otherdog = Dog() otherdog.name = "Hachi" otherdog.age = 5 realm.beginWrite() realm.add(otherdog) // モデルオブジェクトの追加 try! realm.commitWrite() }
29.
通知 (p080) class TableViewController:
UITableViewController { // 通知を有効にしたい期間中は、 // Noti?cationTokenを強参照で保持する必要があります。 var token: Noti?cationToken? override func viewDidLoad() { super.viewDidLoad() let realm = try! Realm() // Realmクラスの通知ハンドラを追加する。 token = realm.addNoti?cationBlock { (noti?cation, realm) in // 通知ハンドラ } } }
30.
通知をサポートしているクラス ? Realmクラス: いずれかのオブジェクトの変更 ?
Objectクラス: オブジェクト自身の変更 ? コレクションクラス: コレクションクラスが持つオブジェクトの 変更 (Results、List、LinkingObjects)
31.
サンプルからRealmの 概要を掴む
32.
サンプル 7選 1. 基本 サンプル/11-01_通知/RealmNotification.xcodeproj 2.
応用 サンプル/11-05_通知のスキップ/RealmWithoutNotifying.xcodeproj
33.
サンプル 7選 3. 通知の細かい挙動 サンプル/11-03通知ハンドラRealmCollectionChange-updateの挙動 確認/RealmCollectionChange.xcodeproj 4.
検索 サンプル/19-08_タイムラインをフィルタリングする/ TwitterFilter.xcodeproj
34.
サンプル 7選 5. マイグレーション サンプル/20-02_仕様変更のマイグレーションに対応する/ TwitterMigration.xcodeproj 6.
Realmファイルの動的な切り替え サンプル/20-03_複数ユーザのログインに対応する/ TwitterMultiple.xcodeproj
35.
サンプル 7選 7. 実践的な開発 サンプル/20-04_その後の開発/TwitterApp.xcodeproj
36.
よくある質問 Q. どういう場合にRealmを選択すればいいの? A. UserDefaults以上に複雑なことをしたい
37.
よくある質問 Q. Core Dataよりいいの? A. -
学習コスト低 - APIがシンプル - 処理が高速
38.
書籍プレゼント 3冊 優先 - 勉強会に初めて来た方 - Realmを使ったことない方
39.
ご静聴ありがとうございました
Download