[Swift] [Realm] Realm でのデータ更新通知まとめ

Realm を使ったときに限らず、アプリケーション内部のデータ更新に合わせて、UI 表示も更新しないといけません。

更新内容に合わせて、UI も更新できると効率的です。Realm では、どのような通知を受け取れるかまとめてみます。

なお、サンプルのコードは以下の記事のものを引き継いで使っています。

[SwiftUI][Realm][Xcode12] Realm を使ったアプリの開発方法(その1 : 要素作成) [SwiftUI][Realm][Xcode12] Realm を使ったアプリの開発方法(その2 : 要素編集) [SwiftUI][Realm][Xcode12] Realm を使ったアプリの開発方法(その3 : UNDO/REDO 実装) [SwiftUI][Realm][Xcode12] Realm を使ったアプリの開発方法(その4: List 表示している要素を修正する)

Realm での通知

Realm では、以下の3種類があります。

  • realm への変更を通知
  • コレクションへの変更を通知
  • オブジェクトへの変更を通知

なお、Realm のドキュメントは、こちら

realm への変更通知

通知条件

realm にたいして、何らかの変更があったときに通知されます。

通知設定方法

以下のように設定します。

通知設定コード

通知情報

struct である Realm.Notification が渡されてきます。

情報としては、”didChange” か “refreshRequired” という情報のみが渡されてきます。

Realm のドキュメントは、こちら

この通知をきっかけに、UI のアップデート等を行うことが可能です。

コレクションへの変更通知

通知条件

Query 等を行った Results や List 等のコレクションに対して、何らかの変更があったときに通知されます。

通知設定方法

以下のように設定します。

通知設定コード

通知情報

変更は、RealmCollectionChange という enum で渡されてきます。
.initial, .update, .error の3種類があり、.update には、deletions, insertions, modifications という追加情報があります。
.update 時の deletions, insertions, modifications には、コレクションのインデックスの配列が渡されてきて、どの要素が、削除/追加/変更 されたのかをインデックスを通して知ることができます。

Realm のドキュメントは、こちら

オブジェクトへの変更通知

通知条件

1要素にたいして、何らかの変更があったときに通知されます。

通知設定方法

以下のように設定します。

通知設定コード

通知情報

変更は、ObjectChange という enum で渡されてきます。
.error, .change, .deleted の3種類があり、.change には、変更されたプロパティの情報が、 PropertyChange という struct の配列で渡されてきます。

Realm のドキュメントは、こちら

まとめ

Realm での変更操作に対しては、以下の単位で変更を検知できる
  • Realm 全体での検知
  • Collection に対しての検知
  • Object に対しての検知

影響範囲を考えて適切な対象の変更検知にすることでパフォーマンスも良くすることができます。

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です