やってみたらなんとかなる

プログラミングをする上で調べたこととかやったこととか

[Swift]RealmSwiftでデータベースを使いたい<基本編>

概要

Swiftでデータベースを使いたい。<準備編>の続きです。

環境

  • Xcode: 12.1
  • Swift: 5.3
  • Realm: 10.1.1
  • RealmSwift: 10.1.1

今回(と次回)で作るアプリ

入力した文字列をリストに追加していくアプリを作ってみる

f:id:yuyuyu_331:20201105131223p:plain
RealmSwiftTestApp

基本的な使い方

もちろん

import RealmSwift

でRealmSwiftを使えるようにしておいてください

クラス(レコード)の定義

データベースに保存するデータ(レコード)の形はRealmSwiftのObjectを継承したクラスで定義します。

class ListComponent: Object {
    @objc dynamic var word = ""
}

今回は文字列しか使わないので、プロパティは一つだけですが、複数あっても大丈夫です。

"@objc"とか"dynamic"って何????ってなると思うんですけど、Objective-Cというプログラミング言語(昔のiOSAppの開発に使われていました)の機能を使うのに必要みたいです。

レコードの追加方法

レコードの追加は、Realmインスタンスを生成して、writeメソッドの中で、addメソッドで追加します。

func addRecord (component: String) {
    let realm = try! Realm()
    let record = ListComponent()
    record.word = component
    try? realm.write {
        realm.add(record)
    }
}

ここで出てきたtry!とtry?ですが、どちらもエラーを無視できるといったものです。try!はエラーの際にクラッシュ、try?は単純にエラーを無視します。ほんとはあんまり使わない方がいいらしいです。。。

ちなみに追加した後に以下のようなコードを書くとエラーになります。

record.word = "hoge"

レコードの変更方法は下に書いているのでそっちを使いましょう。

レコードの削除方法

レコードの削除もRealmインスタンスを生成、writeメソッドの中で、deleteメソッドで削除します。

func delRecord (record: ListComponent) {
    let realm = try! Realm()
    try? realm.write {
        realm.delete(record)
    }
}

レコードの変更方法

レコードを変更する場合も、Realmインスタンスを生成、writeメソッドの中で変更してください。

func changeRecord (record: ListComponent, component: String) {
    let realm = try! Realm()
    try? realm.write {
        record.word = component
    }
}

レコードの読み込み方法

レコードの読み込みをする場合はobjectsメソッドで読み込めます。返り値はRealmSwiftのResultです。

条件に合うレコードを探す場合はfilterメソッドを使います。

全件取得

let realm = try! Realm()
let result = realm.objects(ListComponent.self)

特定の文字列を含むレコードを取得

let realm = try! Realm()
let result = realm.objects(ListComponent.self).filter("word contains 'Yuyu'")

特定の文字列と一致するレコードを取得

let realm = try! Realm()
let result = realm.objects(ListComponent.self).filter("word like 'Yuyuyu'")

数値が一定以下のレコードを取得

文字列以外の条件検索の方法はあったりします。

class TestRecord: Object {
    @objc dynamic var word = ""
    @objc dynamic var number = ""
}

let test1 = TestRecord() test1.word = "hoge" test1.number = 20

let test2 = TestRecord() test1.word = "fizz" test1.number = 3

let realm = try! Realm() try? realm.write { realm.add(test1) realm.add(test2) }

let realm = try! Realm() let result = realm.objects(TestRecord.self).filter("number <= 10")

まとめ

今回は、こんなところですかね、、、多分次回(たぶん実践編)でRealmSwiftをつかったアプリを作っていくと思います。多分。