自动打开

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

AutoOpen 将尝试一次异步打开 Realm,但在没有互联网连接的情况下,将为给定的 appId 和 partitionValue 返回一个打开的 Realm,可以在我们的视图中使用。在用户已经登录后或用户即将登录时,将 AutoOpen 添加到SwiftUI/ViewSwiftUI/App

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

这将立即启动Realm.asyncOpen()操作,该操作将执行使 Realm 进入可用状态所需的所有工作。 (请参阅 Realm.asyncOpen() 文档)

此属性包装器将发布当前Realm.asyncOpen()进程的状态,如进度、错误和打开的域,这些状态可用于更新视图

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

这个打开的realm稍后可以作为环境值注入到视图中,我们的属性包装器将使用该值将打开的域中的数据填充到视图中

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

此属性包装器的行为与AsyncOpen类似,在声明和使用术语方面完全相同,但区别在于采用的是离线优先方法。

  • 每次 asyncOpen 状态更改时, AsyncOpenState的发布者都会发出一个状态。

    声明

    Swift

    public var projectedValue: Published<AsyncOpenState>.Publisher { get }
  • 这将取消来自属性包装器状态的任何通知

    声明

    Swift

    public func cancel()
  • 初始化属性包装器

    声明

    Swift

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

    参数

    appId

    Realm 应用程序的唯一标识符,如果为空或nil将尝试检索最新的单一缓存应用程序。

    partitionValue

    Realm 分区所依据的BSON值。

    configuration

    创建 Realm 时使用的Realm.Configuration ,给定分区值的用户同步配置将设置为syncConfiguration ,如果为空,则使用用户配置。

    timeout

    如果为空或nil未设置连接超时,则完全建立连接所允许的最大毫秒数。

  • 为 Flexible Sync 配置初始化属性包装器。

    声明

    Swift

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

    参数

    appId

    Realm 应用程序的唯一标识符,如果为空或nil将尝试检索最新的单一缓存应用程序。

    configuration

    创建 Realm 时使用的Realm.Configuration ,给定分区值的用户同步配置将设置为syncConfiguration ,如果为空,则使用用户配置。

    timeout

    允许完全建立连接的最大毫秒数。 如果为空或nil ,则不设置连接超时。

  • 声明

    Swift

    nonisolated public func update()