Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Passe dados de domínio entre visualizações SwiftUI

Nesta página

  • Passe Objeto de Realm para uma visualização
  • Passe valores de ambiente
  • Injetar o valor da partição
  • Injetar um Realm Aberto
  • Injetar uma configuração de Realm

O Realm Swift SDK oferece várias maneiras de passar dados de domínio entre visualizações:

  • Passe Objeto de Realm para uma visualização

  • Use a injeção de ambiente para:

    • Injetar um valor da partição em uma visualização

    • Injete um Realm aberto em uma visualização

    • Injetar uma configuração de Realm em uma visualização

Ao usar o wrapper de propriedade @ObservedRealmObject ou @ObservedResults , você abre implicitamente um Realm e recupera o objeto ou resultados especificados. Em seguida, você pode passar esses objetos para uma visualização mais abaixo na hierarquia.

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

Ambiente a injeção é uma ferramenta útil no desenvolvimento da SwiftUI com o Realm. Os wrappers de propriedade de Realm oferecem maneiras diferentes de trabalhar com valores de ambiente ao desenvolver seu aplicativo SwiftUI.

Se você estiver usando a sincronização baseada em partição, poderá usar a injeção de ambiente para passar o valor de ambiente .partitionValue . Injete isso em uma visualização onde você executa o @AsyncOpen ou @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)

Em seguida, quando você usar o wrapper da propriedade para abrir um domínio sincronizado, deixe o partitionValue uma string vazia. O wrapper de propriedade preenche o valor do objeto de ambiente passado de cima.

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

Dica

Migrar para a Flexible Sync

Você pode migrar automaticamente seu Atlas App Services Device Sync Mode da Partition-Based Sync para a Flexible Sync. Isso permite que você aproveite as assinaturas e permissões do Flexible Sync mais expressivas e granulares para gerenciar quais dados sincronizados seus usuários podem ler e escrever. Para obter mais informações, consulte Migrar da Partition-Based Sync para a Flexible Sync.

Você pode injetar um Realm que você abriu em outra visualização do SwiftUI em uma visualização como um valor de ambiente. O invólucro da propriedade usa esse Realm passado para preencher a visualização:

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

Você pode usar um realm diferente do realm padrão passando uma configuração diferente em um objeto de ambiente.

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

Voltar

Reagir às alterações