【SwiftUI】RealmのList型の使い方とForEachで取り出す方法

この記事からわかること

  • Realm SwiftList型とは?
  • 使い方定義方法
  • ForEachを使ったデータ取り出し方

index

[open]

\ アプリをリリースしました /

ふるログ

ふるさと納税管理アプリ-ふるログ-

無料posted withアプリーチ

iOSアプリに簡単に導入できるデータベースRealmのList型についてまとめていきたいと思います。

RealmのList型とは?

List型はRealm Swiftライブラリを導入すると使用可能になるコレクション形式のクラスの1つです。Swiftで扱えるArrayと似たような形式であり、同じような操作方法で扱うことができます。しかしRealmではArray型は扱えないのでRealm用のコレクション型が用意されています。

 public final class List<Element> : RLMSwiftCollectionBase, RealmCollectionImpl where Element : RealmCollectionValue

公式リファレンスによると「Listは1対多関係を定義するために使用されるRealmのコンテナータイプです」と記述されていました。1つのデータに対して複数の値が紐づくような構造の際に使用してねってことのようです。

格納できるデータ型はBoolIntInt8Int16Int32Int64DoubleFloatStringDateDataなどです。

List型のテーブル定義

1対多となるテーブル定義での使い方を見ていきます。今回は1つのグループ(UserGroup)の中に複数のユーザー(User)が格納される場合で使用してみます。

テーブルで定義する際はRealmSwift.List<Element>のように指定します。クラスは初期値が必要なので()をつけて空のListを生成しています。

テーブル定義

class User: Object,ObjectKeyIdentifiable {
  @Persisted(primaryKey: true) var id: ObjectId
  @Persisted  var name:String = ""
  @Persisted  var age:Int = 0
}

class UserGroup: Object, ObjectKeyIdentifiable {
  @Persisted(primaryKey: true) var id: ObjectId
  @Persisted  var users = RealmSwift.List<User>()
}

実際のRealmデータ

Results<UserGroup> <0x159e046d0> (
	[0] UserGroup {
		id = 633428ac38f833c83b7fcb49;
		users = List<User> <0x600002f60000> (
			[0] User {
				id = 633428ae38f833c83b7fcb4a;
				name = ame;
				age = 20;
			},
			[1] User {
				id = 633428af38f833c83b7fcb4b;
				name = kasa;
				age = 80;
			}
		);
	}
)

これで上記のようなデータが生成できます。id1つに対して複数のユーザーが紐づいている形になっています。

List型はForEachで取り出せる

定義されているテーブルがObjectKeyIdentifiableプロトコルに準拠している場合、List型はForEachやListなどで回してデータを取り出すことができます。

struct ContentView: View {
    
  @ObservedResults(UserGroup.self) var groups
  
  var body: some View {
    if let group = groups.first{
      List {
        ForEach(group.users) { user in
          HStack{
              Text(user.name)
              Text("\(user.age)")
          }
        }.listStyle(GroupedListStyle())
      }
    }
  }
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

私がSwift UI学習に使用した参考書

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

自作iOSアプリ

\ アプリをリリースしました /

mapping

自分だけの地図を作ろう!-mapping-

無料posted withアプリーチ

割り勘アプリ-bill-

旅行におすすめ!
割り勘アプリ-bill-

無料posted withアプリーチ

Imakoko

現在地を取得するアプリ!Imakoko

無料posted withアプリーチ

ふるログ

ふるさと納税管理アプリ-ふるログ-

無料posted withアプリーチ

Remind-シンプル通知アプリ-

シンプル通知アプリ-Remind-

無料posted withアプリーチ

CLIPURL

好きな記事をクリップしよう!-CLIPURL-

無料posted withアプリーチ

記録カレンダー

続けたを可視化できるアプリ!記録カレンダー

無料posted withアプリーチ

CART-共有できるお買い物リスト-

CART-共有できるお買い物リスト-

無料posted withアプリーチ

Githubにて
iOSアプリのソースコードを公開中!

自作Webアプリ

子育て知識共有サイト-mikata-

子育て知識共有サイト-mikata-

フレームワーク:Laravel/Vue.js

作成の流れQiita「Laravel×Vue.jsを使って初めてWebアプリを自作しました!」

感想:初めて作成したWebアプリです!メールアドレスでの会員登録や質問投稿、回答やコメント、いいねやフォローなどSNSに近い機能を実装してみました。レビューや修正すべきポイントなどを教えていただけると嬉しいです!

New Article

index