Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

データ SwiftUI ビュー間で Realm を渡す

項目一覧

  • Realm オブジェクトをビューに渡す
  • 環境値を渡す
  • パーティション値の挿入
  • 開いた Realm の挿入
  • Realm 構成の挿入

Realm Swift SDK には、ビュー間で Realm データを渡すいくつかの方法が用意されています。

  • Realm オブジェクトをビューに渡す

  • 環境インジェクションを使用して、次の操作を行います。

    • ビューへのパーティション値の挿入

    • 開かれたRealmをビューに挿入

    • Realm 構成のビューへの挿入

@ObservedRealmObjectまたは@ObservedResultsプロパティ ラッパーを使用すると、暗黙的に Realm が開き、指定されたオブジェクトまたは結果が検索されます。 次に、それらのオブジェクトを階層のさらに下位のビューに渡すことができます。

struct DogsView: View {
@ObservedResults(Dog.self) var dogs
/// The button to be displayed on the top left.
var leadingBarButton: AnyView?
var body: some View {
NavigationView {
VStack {
// The list shows the dogs in the realm.
// The ``@ObservedResults`` above implicitly opens a realm and retrieves
// all the Dog objects. We can then pass those objects to views further down the
// hierarchy.
List {
ForEach(dogs) { dog in
DogRow(dog: dog)
}.onDelete(perform: $dogs.remove)
}.listStyle(GroupedListStyle())
.navigationBarTitle("Dogs", displayMode: .large)
.navigationBarBackButtonHidden(true)
.navigationBarItems(
leading: self.leadingBarButton,
// Edit button on the right to enable rearranging items
trailing: EditButton())
}.padding()
}
}
}

環境 インジェクションは、Realm を使用した SwiftUI 開発に役立つツールです。Realm プロパティ ラッパーは、SwiftUI アプリケーションの開発時に環境値を操作するためのさまざまな方法を提供します。

パーティションベースの同期を使用している場合は、環境インジェクションを使用して.partitionValue環境値を渡すことができます。 これを、 @AsyncOpenまたは@AutoOpenを実行するビューに挿入します。

// If there is a logged in user, pass the user ID as the
// partitionValue to the view that opens a realm.
OpenPartitionBasedSyncRealmView().environment(\.partitionValue, user.id)

次に、プロパティ ラッパーを使用して同期された Realm を開くときは、partitionValue は空のstringのままにします。 プロパティ ラッパーは、上記から渡された環境オブジェクトから値を入力します。

// We can use an empty string as the partitionValue here because we're
// injecting the user.id as an environment value from the LoginView.
@AutoOpen(appId: YOUR_APP_SERVICES_APP_ID_HERE, partitionValue: "", timeout: 4000) var autoOpen

Tip

Flexible Sync への移行

App Services Device Sync モードは、パーティションベースの同期から Flexible Sync に自動的に移行できます。 これにより、より表現的かつ粒度の高い Flexible Sync サブスクリプションと権限を活用して、ユーザーが読み書きできる同期データを管理できます。 詳細については、「パーティションベースの同期から Flexible Sync への移行 」を参照してください。

別の SwiftUI ビューで開いた Realm を環境値としてビューに挿入できます。 プロパティ ラッパーは、この渡された Realm を使用してビューにデータを入力します。

ListView()
.environment(\.realm, realm)

環境オブジェクトで別の構成を渡すことで、デフォルト以外の Realm 以外の Realm を使用できます。

LocalOnlyContentView()
.environment(\.realmConfiguration, Realm.Configuration( /* ... */ ))

戻る

Reactに対応する