LoginSignup
11
7

More than 3 years have passed since last update.

SwiftでRealmを使用する方法について

Posted at

Realmをインストールする

Realmを使用するために、CocoaPodsを使用してインストールを行います。
PodFileにpod 'RealmSwift'を追記し、pod installでインストールします。

pod 'RealmSwift'

Swiftではimport RealmSwiftでインポートします。

import RealmSwift

モデル定義

class モデル名: Object { }でモデル定義を行います。
@objc dynamic varで、プロパティ定義を行います。

import UIKit
import RealmSwift

class モデル名: Object {
    @objc dynamic var プロパティ名1 : 型名 = 初期値
    @objc dynamic var プロパティ名2 : 型名 = 初期値
}

データの追加

realm.add(モデル名(value: 値))で、データを追加できます。
事前に、プロパティに対する値を入れている必要があります。

let realm = try! Realm()

let object = モデル名()
object.プロパティ名1 = 値1
object.プロパティ名2 = 値2

try! realm.write {
     realm.add(モデル名(value: object))
}

データの更新

.filter等で対象のObjectを取得し、write()でデータの更新を行います。

let realm = try! Realm()

let results = realm.objects(dayList.self).filter("プロパティ名1 == 値1 AND プロパティ名2 == 値2").first

try! realm.write {
     results!.プロパティ名1 = 値3
}


データの削除

.filter等で対象のObjectを取得し、write()でデータを削除を行います。
.delete()で対象のみdeleteAll()で全て削除します。


let realm = try! Realm()


let results = realm.objects(toDoList.self).filter("name == 'Michael Jeffrey Jordan'")

//
try! realm.write {
realm.delete(results)
}

データが全くない場合初期値を追加する

データがない場合、データを読み込みに失敗します。
そのため、以下のようにして、データがない場合のみ初期値の追加をする必要があります。

let realm = try! Realm()

// データが1つもない場合
if realm.objects(モデル名().self).first == nil {
     let object = モデル名()
     object.プロパティ名1 = 値1
     object.プロパティ名2 = 値2

     try! realm.write {
          realm.add(モデル名(value: object))
     }
}

モデルの変更をした場合

プロパティ名の追加等を行った場合、Realmの呼び出しでエラーになります。
そのため、変更があった場合スキーマの情報を更新させエラーが発生しないようにする必要があります。

// プロパティ名の変更があった場合、schemaVersionの値を変更する
let config = Realm.Configuration(
      schemaVersion: 1,
      migrationBlock: { migration, oldSchemaVersion in})

Realm.Configuration.defaultConfiguration = config
config = Realm.Configuration()
config.deleteRealmIfMigrationNeeded = true

参考

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7