オブジェクトの生成
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])
}
}
終わりに
多分もっといい方法がありそうですが、お手柔らかに・・・
こういう方法もあるよーとか、自分はこういうふうに使ってるよーなどありましたらご教授いただけると幸いです。
参考資料