しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

RealmSwiftを試したけどもうCoreDataは使わなくなるかもしれない

RealmSwift試した感想とメモ書きです。
CRUDくらいしかやってないのですが使うのがすごい簡単すぎて感動したのでその辺り書いて行こうと思います。
利用したRealmのバージョンは0.93.1になります。

Realmとは

SQLiteの代替になると言われているデータベースです。
海外ではZynga、国内ではChatwork等で利用されているようです。
構文の短さやテーブルの定義の簡単さが魅力です。

RealmSwiftとは

RealmSwiftとはSwiftで書かれたRealmを使うためのライブラリです。
2015年5月にリリースされました。

RealmSwiftのインストール

Podfileに下記を記載してpod installをするだけです。
CocoaPodsの0.37.1以上が必要なので、古いCocoaPodsを使っている場合は更新する必要があります。

pod 'RealmSwift'

use_frameworks!

RealmSwiftでのスキーマ定義

以下のようにクラスを作成すれば完了です。
スキーマ定義用のファイルが不要なので非常に簡単です。

import RealmSwift

class User: Object {
    dynamic var id = 0
    dynamic var name = ""
    
    override static func primaryKey() -> String? {
        return "id"
    }
}

RealmSwiftでのデータ作成

データの作成は下のように行います。
Realmのインスタンスを作り、それに対してModelをaddすればデータが保存されます。

import RealmSwift

let realm = try! Realm()

let user = User()
user.id = 0
user.name = "Name1"
try! realm.write {
    realm.add(user)
}

RealmSwiftでのデータ取得

データの取得は下のように行います。

import RealmSwift

let realm = try! Realm()
let user = realm.objects(User)[0]

検索は下のように行います。

import RealmSwift

let realm = Realm()
let users = realm.objects(User).filter("id = 0")

メソッドチェーンも使う事ができます。

import RealmSwift

let realm = Realm()
let users = realm.objects(User).filter("id = 0").filter(NSPredicate(format: "id = 0"))

ソートは下のように書けます。

import RealmSwift

let realm = Realm()
let users = realm.objects(User).filter("id = 0").sorted("id")

RealmSwiftでのデータ更新

データの更新は下のようにします。

import RealmSwift

let realm = Realm()
let user = realm.objects(User).last!
try! realm.write {
    user.name = "Name2"
}

RealmSwiftでのデータ削除

データの削除は下記の通りです。

import RealmSwift

let realm = try! Realm()
let user = realm.objects(User).last!
_ = try? realm.write {
    realm.delete(user)
}

まとめ

簡単でしたがRealmSwiftでの使い方を書いてみました。
Coredataと比べると、設定が不要で構文も非常にシンプルで書きやすいですね。
今後はRealmを積極的に利用していこうと思います。

追記

マイグレーション周りも調べてみました。

llcc.hatenablog.com