【Swift】Realmを使ってみよう

Realm

今回は、Realmの導入から使い方について書きたいと思います。

Realmとは?

Realm

Realmはクロスプラットフォームに対応した次世代版mobileデータベースです。
Objetctive-c, Swift, Javaに対応しており、ORMではなく独自のエンジンを採用しています。
また、その性能の速さ、実装コストの低さも売りの様です。
SQLiteやCore Dataで疲弊していた人にとっては朗報ですね!
これだけ整っていて料金は無料。

とりあえず、使ってみる価値はあるのではないでしょうか。

インストール方法

今回はCarthageを使って導入したいと思います。

Carthageについてや使い方についてはこちらをご覧ください。

【Swift】CarthageでAlamofireを入れてみる

当記事執筆時期のRealmの最新バージョンはv.0.97.0となっております。

Carthageについては多く触れず、Realm独自の部分のみに絞って軽く説明したいと思います。

はじめにもご覧ください。

Cartfileの編集

Cartfileに以下を追加します。

github "realm/realm-cocoa"

.frameworkの追加

carthage updateをすると

Realm.framework
RealmSwift.framework

の二つがCartage/Build/iOS内に出来ると思います。

Objective-cで書いている方はealm.frameworkのみ、
Swiftで書いている方は両方追加してください。

当然、Run Scriptのパスも追加した.framework分追加します。

Realmを使ってみる

さて、早速Realmを使ってみたいと思います。

※コード例はSwiftで記述しています。

1. Objectのサブクラスの用意
2. Realmへの書き込み(追加/更新/削除)
3. Realmからの読み込み

1. Objectのサブクラスの用意

Objectは従来のRDBでいうテーブルのような存在です。

Objectクラスを継承したクラスのみRealmに保存する事が出来ます。
また、保存出来る型には制約があり、

Bool, Int8, Int16, Int32, Int64, Double, Float, String, NSDate(ミリ秒以下切り捨て), NSData

のみとなります。

実際のコードはこんな形になります。

class Person: Object {
    dynamic var name = ""
    dynamic var height = 0
    dynamic var weight = 0
}

2. Realmへの書き込み(追加/更新/削除)

さて、オブジェクトが用意出来たので実際にそれをRealmで管理してみましょう。

Realmへのオブジェクトの追加、変更、削除は、トランザクションの内部で行う必要があります。
ですが、すごく簡単ですのでご心配なく。

Realmへの追加

// Personインスタンスの作成
let person = Person()
person.name = "ashdik"
person.height = 190
person.weight = 70

// Realmインスタンスの取得
let realm = try! Realm()

realm.write({
    realm.add(person)
})

これだけです。めちゃくちゃ簡単ですね。
Personインスタンスの用意の方がDBへの追加より行数食ってる。

Realmへの更新

// let person = ... 保存されているPersonオブジェクトを取得

let realm = try! Realm()

realm.write({
  realm.height = 195
})

トランザクション内でプロパティを変更するのみ!

Realmへの削除

// let person = ... 保存されているPersonオブジェクトを取得

let realm = try! Realm()

realm.write({
  realm.delete(person)
})

全件削除は

realm.write({
  realm.deleteAll()
})

簡単すぎぃ!

Objectインスタンスはデータのコピーではなく実体であること

今回の例で言えばPersonインスタンスはデータの実体になります。コピーではありません。
なので、トランザクション内でプロパティを変更することは、
updateクエリの様な意味合いを持ちますし、
インスタンスのdeleteはdeleteクエリの様な意味合いを持つことになるのです。

3. Realmからの読み込み

さて、最後に読み込みを行いたいと思います。

オブジェクト全件取得

 let realm = try! Realm()  let persons = realm.objects(Person) // -> Results

※ResultsはObjectのサブクラスのみ格納出来るArrayと言う認識で大丈夫かと思います。

条件指定取得

 let realm = try! Realm()  let tallPersons = realm.objects(Person).filter("height> 190")

filterでwhere句の様な形で対象の絞り込みを行います。

これで、Realmの基本的な使い方の説明を終わります。
また気が向いたらもう少し込み入った使い方のブログを書こうと思います。

誰かのお役に立てば。

このブログのswift記事一覧

コメント

タイトルとURLをコピーしました