0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】RealmでのCURD操作

Posted at

オブジェクトの生成

Realmでは下記のように専用のクラスを作成しオブジェクトを生成します。

class Plan: Object {
   // 変数名の頭に"@objc dynamic var"をつける
    @objc dynamic var id: String = NSUUID().uuidString
    @objc dynamic var title: String = ""
    @objc dynamic var content: String = ""
    @objc dynamic var createdAt: Date = Date()
    
    // プライマリーキーを指定
    override static func primaryKey() -> String? {
        return "id" //プライマリーキーに指定する変数名
    }
}

// こんな感じで任意の方法で入れたいデータを入れる
let newPlan = Plan()
newPlan.title = "タイトル"
newPlan.content = "内容"

Create

任意の場所でrealmのインスタンスを作成し下記のようにadd()を使用することによってDBにデータが保存されます。

最後の行のようにデータが保存されているファイルのパスを出力することができ、そのファイルをRealmStudioなどで開くことで、どのんなデータが入っているかを見ることがきます。

import RealmSwift



let realm = try! Realm() // DBの参照

//DBにnewPlanを追加
try! realm.write {
   // 追加したいオブジェクトを引数に入れる
   realm.add(newPlan)
}

print(Realm.Configuration.defaultConfiguration.fileURL!) //Realmのファイル場所をプリント

Update

下記は保存されている任意のオブジェクトをcreatedAt昇順でソートし、取得しています。
この時に変数に格納されるのは配列になります。

soreted()ではbyKeyPathにPlanクラスで定義したメンバ変数を文字列で指定し、ascendingでは昇順で取得したい場合"true"を、降順で取得したい場合"false"を指定します。


// DBに保存されている任意のオブジェクトを配列で取得してくる
let results = realm.objects(Plan.self).sorted(byKeyPath: "createdAt", ascending: true)

Read

更新したいオブジェクトをfilterメソッドを使用し、プライマリーキーなどを指定してDBから取得します。
この時、targetPlanには配列が入ってくるので、realm.writeの中ではtargetPlan[0]のように記述しています。
(他の方法があれば教えていただきたいです・・・)


// 更新したいオブジェクトをDBから取得してくる
let targetPlan = realm.objects(Plan.self).filter("id == '\(planId)'")
        
do{
   try! realm.write{
         targetPlan[0].title = "タイトル2"
         targetPlan[0].content = "更新したよ"
   }
}

Delete

Updateの処理と同様に、プライマリーキーなどを指定して削除したいオブジェクトをDBから取得します。
下記のように記述することで任意のデータを削除できます。
realm.delete()ではtargetPlanが配列のため引数にはtargetPlan[0]を入れています。


// 削除したいオブジェクトをDBから取得してくる
let targetPlan = realm.objects(Plan.self).filter("id == '\(planId)'")
        
do{
   try! realm.write{
       realm.delete(targetPlan[0])
   }
}

終わりに

多分もっといい方法がありそうですが、お手柔らかに・・・
こういう方法もあるよーとか、自分はこういうふうに使ってるよーなどありましたらご教授いただけると幸いです。

参考資料

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?