自动打开
@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/View
或SwiftUI/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()
-
初始化属性包装器
声明
参数
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()