Docs Menu
Docs Home
/ /
Interfaz de usuario rápida

Pasar datos de dominio entre vistas de SwiftUI

El SDK de Realm Swift proporciona varias maneras para transferir datos de Realm entre vistas:

  • Pasar objetos de Realm a una vista

  • Utilice la inyección de entorno para:

    • Inyectar un valor de partición en una vista

    • Inyectar un reino abierto en una vista

    • Inyectar una configuración de reino en una vista

Cuando utilices el @ObservedRealmObject o el contenedor de propiedades @ObservedResults, se abre implícitamente un dominio y se recuperan los objetos o resultados especificados. Posteriormente, se pueden pasar esos objetos a una vista inferior en la jerarquía.

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()
}
}
}

Entorno La inyección es una herramienta útil en el desarrollo de SwiftUI con Realm. Los contenedores de propiedades de Realm ofrecen diferentes maneras de trabajar con valores de entorno al desarrollar su aplicación SwiftUI.

Si utilizas Partition-Based Sync, puedes utilizar la inyección de entorno para pasar el valor de entorno .partitionValue. Inyecte esto en una vista donde realice el @AsyncOpen o el @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)

Luego, al usar el contenedor de propiedades para abrir un dominio sincronizado, deje partitionValue como una cadena vacía. El contenedor de propiedades rellena el valor del objeto de entorno pasado anteriormente.

// 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

Migrar a la sincronización flexible

Puedes migrar automáticamente el modo de sincronización de dispositivos de App Services de la sincronización basada en particiones a la sincronización flexible. Esto te permite aprovechar las suscripciones y permisos de la sincronización flexible, más expresivos y granulares, para administrar los datos sincronizados que tus usuarios pueden leer y escribir. Para obtener más información, consulta Migrar de la sincronización basada en particiones a la sincronización flexible.

Puedes inyectar un dominio abierto en otra vista de SwiftUI en una vista como valor de entorno. El contenedor de propiedades utiliza este dominio pasado para rellenar la vista:

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

Puede utilizar un reino distinto del reino predeterminado pasando una configuración diferente en un objeto de entorno.

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

Volver

Reaccionar a los cambios

En esta página