AutoOpen

@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *)
@MainActor
@propertyWrapper
public struct AutoOpen : DynamicProperty

AutoOpen tentará uma vez abrir um Realm de forma assíncrona, mas, no caso de não haver conexão com a Internet, retornará um realm aberto para o appId e partitionValue fornecidos, que podem ser usados em nossa visualização. Adicione o AutoOpen ao seu SwiftUI/View ou SwiftUI/App, depois que um usuário já estiver conectado ou se um usuário estiver conectado

@AutoOpen(appId: "app_id", partitionValue: <partition_value>, timeout: 4000) var autoOpen

Isso iniciará imediatamente uma operação Realm.asyncOpen() que executará todo o trabalho necessário para colocar o Realm em um estado utilizável. (consulte a documentação do Realm.asyncOpen())

Este invólucro de propriedade publicará estados do processo atual Realm.asyncOpen() , como progresso, erros e um Realm aberto, que pode ser usado para atualizar a visualização

struct AutoOpenView: View {
    @AutoOpen(appId: "app_id", partitionValue: <partition_value>) var autoOpen

    var body: some View {
       switch autoOpen {
       case .notOpen:
           ProgressView()
       case .open(let realm):
           ListView()
              .environment(\.realm, realm)
       case .error(_):
           ErrorView()
       case .progress(let progress):
           ProgressView(progress)
       }
    }
}

Esse realm aberto pode ser injetado posteriormente na visualização como um valor de ambiente que será usado por nossos wrappers de propriedade para preencher a visualização com dados do Realm aberto

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

Esse invólucro de propriedades se comporta de forma semelhante a AsyncOpen e, em termos de declaração e uso, é completamente idêntico, mas com a diferença de uma abordagem offline-first.

  • Um Editor para AsyncOpenState emite um estado sempre que o estado asyncOpen é alterado.

    Declaração

    Swift

    @MainActor
    public var projectedValue: Published<AsyncOpenState>.Publisher { get }
  • Isso cancelará qualquer notificação dos estados do invólucro da propriedade

    Declaração

    Swift

    @MainActor
    public func cancel()
  • Inicialize o wrapper da propriedade

    Declaração

    Swift

    @MainActor
    public init<Partition>(appId: String? = nil,
                           partitionValue: Partition,
                           configuration: Realm.Configuration? = nil,
                           timeout: UInt? = nil) where Partition: BSON

    Parâmetros

    appId

    O identificador exclusivo do seu aplicativo Realm, se vazio ou nil , tentará recuperar o aplicativo singular mais recente em cache.

    partitionValue

    O valor BSON em que o Realm é particionado.

    configuration

    O Realm.Configuration usado ao criar o Realm, a configuração de sincronização do usuário para o valor da partição fornecido será definida como syncConfiguration; se estiver vazia, a configuração do usuário será usada.

    timeout

    O número máximo de milissegundos para permitir que uma conexão se torne totalmente estabelecida, se vazia ou nil nenhum tempo limite de conexão estiver definido.

  • Inicialize o wrapper de propriedade para uma configuração de Flexible Sync.

    Declaração

    Swift

    @MainActor
    public init(appId: String? = nil,
                configuration: Realm.Configuration? = nil,
                timeout: UInt? = nil)

    Parâmetros

    appId

    O identificador exclusivo do seu aplicativo Realm, se vazio ou nil , tentará recuperar o aplicativo singular mais recente em cache.

    configuration

    O Realm.Configuration usado ao criar o Realm, a configuração de sincronização do usuário para o valor da partição fornecido será definida como syncConfiguration; se estiver vazia, a configuração do usuário será usada.

    timeout

    O número máximo de milissegundos para permitir que uma conexão se torne totalmente estabelecida., se vazio ou nil , nenhum tempo limite de conexão está definido.

  • Declaração

    Swift

    nonisolated public func update()