6
5

More than 3 years have passed since last update.

Realmの基本的な操作

Last updated at Posted at 2020-01-07

なぜこの記事を書いたか

つい最近まで仕事でiOSアプリを開発していたんですけど、ニートになったんで暇だから以前触っていたRealmについて忘れないように
備忘録というか、運動後のストレッチ的な感覚で適当につらつら書いていきます。
ニートは好きなこと何でも出来ていいですね。

Tableの作成

RealmではTableって言わないでModelって言うんだっけか・・・?
基本的にはRealm←ここに書いてあることですが、

import RealmSwift

class HogeEntity: Object {

    @objc dynamic var not_optional_bool = false // 非OptionalなBool
    let optional_bool = RealmOptional<Bool>() // OptionalなBool

    @objc dynamic var not_optional_int = 1 // 非OptionalなInt
    let optional_int = RealmOptional<Int>() // OptionalなInt

    @objc dynamic var not_optional_float: Float = 0.0 // 非Optionalなfloat
    let optional_float = RealmOptional<Float>() // Optionalなfloat

    @objc dynamic var not_optional_double: Double = 0.0 // 非Optionalなdouble
    let optional_double = RealmOptional<Double>() // Optionalなdouble

    @objc dynamic var not_optional_string = "" // 非OptionalなString
    @objc dynamic var optional_string: String? = nil // OptionalなString

    @objc dynamic var not_optional_data = Data() // 非OptionalなData
    @objc dynamic var optional_data: Data? = nil // OptionalなData

    @objc dynamic var not_optional_date = Date() // 非OptionalなDate
    @objc dynamic var optional_date: Date? = nil // OptionalなDate

    @objc dynamic var optional_object: TestObject? // OptionalなObject, (※)ObjectはOptionalのみ

    let non_optional_list = List<Int>() // 非OptionalなList

    // Primary Keyに指定する値は変数名をそのまま記述してあげる。
    override static func primaryKey() -> String? {

        return "not_optional_int" 
    }
}

// 例えば緯度経度を一纏めにして保存したいよ!って場合はObject型にして保存してあげたりとか。
class TestObject: Object {

    var longitude: Float?
    var latitude: Float?
}

Add

値を新しく追加したい場合

func addDayo() {

    let entity = HogeEntity()

    entity.not_optional_string = "新しく追加したよ"

    do {
        let realm = try Realm()
        try realm.write {

            realm.add(entity)
        }
    }
    catch {

        print(error.localizedDescription)
    }
}

Delete

値を削除したい場合

func delete(entity: HogeEntity) {

    do {
        let realm = try Realm()
        try realm.write {

            realm.delete(entity)
        }
    }
    catch {

        print(error.localizedDescription)
    }
}

Fetch (単体)

PrimaryKey指定で値を取得したい場合

func fetch(primaryKey: Int) -> HogeEntity? {

    do {

        let realm = try Realm()
        return realm.object(ofType: HogeEntity.self, forPrimaryKey: primaryKey)
    }
    catch {

        print(error.localizedDescription)
        return nil
    }
}

Fetch (複数)

例えば
HogeEntity#not_optional_stringにFUGAが含まれるものだけ取得したい場合

func fetch() -> [HogeEntity]? {

    let predicate = NSPredicate(format: "not_optional_string contains 'FUGA'")

    do {

        let realm = try Realm()
        return Array(realm.objects(HogeEntity.self).filter(predicate))
    }
    catch {

        print(error.localizedDescription)
        return nil
    }
}

Update

値の更新を行いたい場合

func update() {

    do {
        let realm = try Realm()

        guard let updateTarget = realm.object(ofType: HogeEntity.self, forPrimaryKey: 1) else {

            return
        }
        try realm.write {

            updateTarget.not_optional_bool = true
        }
    }
    catch {

        print(error.localizedDescription)
    }
}

とりあえず

基本的に使用するのはこの程度かな?と思いますので現状ここまでにしておきます。
気が向いたら+@で追記していきます。

6
5
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
6
5