[Swift]RealmSwiftでデータベースを使いたい<基本編>
概要
Swiftでデータベースを使いたい。<準備編>の続きです。
環境
- Xcode: 12.1
- Swift: 5.3
- Realm: 10.1.1
- RealmSwift: 10.1.1
今回(と次回)で作るアプリ
入力した文字列をリストに追加していくアプリを作ってみる
基本的な使い方
もちろん
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をつかったアプリを作っていくと思います。多分。