データ SwiftUI ビュー間で Realm を渡す
Realm Swift SDK には、ビュー間で Realm データを渡すいくつかの方法が用意されています。
Realm オブジェクトをビューに渡す
環境インジェクションを使用して、次の操作を行います。
ビューへのパーティション値の挿入
開かれたRealmをビューに挿入
Realm 構成のビューへの挿入
Realm オブジェクトをビューに渡す
@ObservedRealmObject
または@ObservedResults
プロパティ ラッパーを使用すると、暗黙的に Realm が開き、指定されたオブジェクトまたは結果が検索されます。 次に、それらのオブジェクトを階層のさらに下位のビューに渡すことができます。
struct DogsView: View { 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. YOUR_APP_SERVICES_APP_ID_HERE, partitionValue: "", timeout: 4000) var autoOpen (appId:
Tip
Flexible Sync への移行
App Services Device Sync モードは、パーティションベースの同期から Flexible Sync に自動的に移行できます。 これにより、より表現的かつ粒度の高い Flexible Sync サブスクリプションと権限を活用して、ユーザーが読み書きできる同期データを管理できます。 詳細については、「パーティションベースの同期から Flexible Sync への移行 」を参照してください。
開いた Realm の挿入
別の SwiftUI ビューで開いた Realm を環境値としてビューに挿入できます。 プロパティ ラッパーは、この渡された Realm を使用してビューにデータを入力します。
ListView() .environment(\.realm, realm)
Realm 構成の挿入
環境オブジェクトで別の構成を渡すことで、デフォルト以外の Realm 以外の Realm を使用できます。
LocalOnlyContentView() .environment(\.realmConfiguration, Realm.Configuration( /* ... */ ))