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
Pasa objetos Realm a 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 { (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() } } }
Pasar valores ambientales
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.
Inyectar el valor de la partición
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. (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.
Inyectar un reino abierto
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)
Inyectar una configuración de reino
Puede utilizar un reino distinto del reino predeterminado pasando una configuración diferente en un objeto de entorno.
LocalOnlyContentView() .environment(\.realmConfiguration, Realm.Configuration( /* ... */ ))