@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *)
@MainActor
@propertyWrapper
public struct AutoOpen : DynamicProperty
AutoOpen
will try once to asynchronously open a Realm, but in case of no internet connection will return an opened realm for the given appId and partitionValue which can be used within our view. Add AutoOpen to your SwiftUI/View
or SwiftUI/App
, after a user is already logged in or if a user is going to be logged in
@AutoOpen(appId: "app_id", partitionValue: <partition_value>, timeout: 4000) var autoOpen
This will immediately initiates a Realm.asyncOpen()
operation which will perform all work needed to get the Realm to a usable state. (see Realm.asyncOpen() documentation)
This property wrapper will publish states of the current Realm.asyncOpen()
process like progress, errors and an opened realm, which can be used to update the view
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)
}
}
}
This opened realm
can be later injected to the view as an environment value which will be used by our property wrappers to populate the view with data from the opened realm
ListView()
.environment(\.realm, realm)
This property wrapper behaves similar as AsyncOpen
, and in terms of declaration and use is completely identical, but with the difference of a offline-first approach.
A Publisher for AsyncOpenState
, emits a state each time the asyncOpen state changes.
Swift
@MainActor
public var projectedValue: Published<AsyncOpenState>.Publisher { get }
This will cancel any notification from the property wrapper states
DeclarationSwift
@MainActor
public func cancel()
Initialize the property wrapper
DeclarationSwift
@MainActor
public init<Partition>(appId: String? = nil,
partitionValue: Partition,
configuration: Realm.Configuration? = nil,
timeout: UInt? = nil) where Partition: BSON
Parameters appId
The unique identifier of your Realm app, if empty or nil
will try to retrieve latest singular cached app.
partitionValue
The BSON
value the Realm is partitioned on.
configuration
The Realm.Configuration
used when creating the Realm, user’s sync configuration for the given partition value will be set as the syncConfiguration
, if empty the user configuration will be used.
timeout
The maximum number of milliseconds to allow for a connection to become fully established, if empty or nil
no connection timeout is set.
Initialize the property wrapper for a flexible sync configuration.
DeclarationSwift
@MainActor
public init(appId: String? = nil,
configuration: Realm.Configuration? = nil,
timeout: UInt? = nil)
Parameters appId
The unique identifier of your Realm app, if empty or nil
will try to retrieve latest singular cached app.
configuration
The Realm.Configuration
used when creating the Realm, user’s sync configuration for the given partition value will be set as the syncConfiguration
, if empty the user configuration will be used.
timeout
The maximum number of milliseconds to allow for a connection to become fully established., if empty or nil
no connection timeout is set.
Swift
nonisolated public func update()
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4