結果
@frozen
public struct Results<Element> : Equatable, RealmCollectionImpl where Element : RealmCollectionValue
extension Results: RealmSubscribable
extension Results: Encodable where Element: Encodable
Results
は、オブジェクト クエリから返される Realm の自動更新コンテナ タイプです。
Results
はList<Element>
と同じ述語でクエリできます。また、クエリを連鎖させてクエリ結果をさらにフィルタリングできます。
Results
は、現在のスレッドでの書込みトランザクション中など、現在のスレッド上の Realm の現在の状態を常に反映します。 これに対する 1 つの例外は、 for...in
列挙を使用する場合です。この列では、列挙が開始されると、列挙中にフィルターによって除外されるようにオブジェクトが削除または変更された場合でも、クエリに一致したオブジェクトが常に列挙されます。
Results
は、最初にアクセスされたときに遅延評価されるため、クエリの結果が要求された場合にのみクエリを実行します。 つまり、データのソートやフィルタリングのために一時的なResults
を複数連鎖させても、中間状態を処理する不要な作業は実行されません。
結果が評価されるか、通知ブロックが追加されると、結果は早期に最新状態に維持され、可能な場合は常にバックグラウンド スレッドで最新の状態を維持するための作業が実行されます。
結果インスタンスは、直接インスタンス化することはできません。
-
結果によって表されるオブジェクトの、人間が判読可能な説明。
宣言
Swift
public var description: String { get }
-
指定された
index
にあるオブジェクトを返します。宣言
Swift
public subscript(position: Int) -> Element { get }
パラメーター
index
インデックス。
-
宣言
Swift
public static func == (lhs: Results<Element>, rhs: Results<Element>) -> Bool
-
結果のローカル クエリに一致する SyncSubscription を作成します。 サブスクリプションを Realm のローカル サブスクリプションセットにコミットすると、メソッドは
WaitForSyncMode
に従ってダウンロードを待機します。名前のないサブスクライブ
名前なしで一致するクエリを持つ
.subscribe()
が名前なしで呼び出された場合、別のサブスクリプションは作成されません。名前付きサブスクリプションに一致するクエリを持つ
.subscribe()
が名前なしで呼び出された場合、名前のない追加のサブスクリプションが作成されます。名前付きサブスクリプション
名前のないサブスクリプションに一致するクエリを持つ名前で
.subscribe()
が呼び出された場合、追加の名前付きサブスクリプションが作成されます。既存の名前とクエリ
別のクエリで取得される名前で
.subscribe()
が呼び出された場合、古いサブスクライブは新しいクエリで更新されます。同一のクエリですでに使用されている名前で
.subscribe()
が呼び出される場合、新しいサブスクリプションは作成されません。注意
このメソッドは、
WaitForSyncMode.always
と.onCreation
(サブスクリプションが最初に作成されたとき)が使用されたときに返す前に、すべてのデータがダウンロードされるまで待機します。 タイムアウトが設定されていない場合は、インターネット接続が必要です。注意
このメソッドは、サブスクリプションを作成または更新する更新トランザクションを開きます。 複数のサブスクライブを作成するために、このメソッドをループ処理しないことをお勧めします。 これにより、不要な更新トランザクションが複数発生してパフォーマンスのボトルネックが発生する可能性があります。 複数のサブスクライブを一度に作成するには、
SyncSubscription.update
を使用します。警告
この関数は、メイン スレッドとアクター分離された Realm でのみサポートされています。
警告
この API は現在
Preview
であり、将来変更される可能性があります。宣言
Swift
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @_unsafeInheritExecutor public func subscribe(name: String? = nil, waitForSync: WaitForSyncMode = .onCreation, timeout: TimeInterval? = nil) async throws -> Results<Element>
パラメーター
name
サブスクライブに適用される名前
waitForSync
WaitForSyncMode
サブスクライブのダウンロード動作を決定します。 デフォルトは.onCreation
です。timeout
任意のクライアント タイムアウト。 この時間が経過すると、クライアントはサブスクリプションのダウンロードの待機をキャンセルします。 このタイムアウトに達しても、サーバー エラーは発生しません。
戻り値
self
を返します。 -
結果のローカル フィルターに一致する SyncSubscription を削除します。
メソッドは、Realm のローカル サブスクリプションセットにサブスクリプションの削除をコミットした後にを返します。 このメソッドを呼び出すと、オブジェクトが Realm から削除されるのを待たなくなります。
名前付きサブスクリプションを削除するには、結果によって以前にサブスクライブが作成されている必要があります。 例:
let results1 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe(name: "adults") let results2 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe(name: "overOne") let results3 = try await realm.objects(Dog.self).where { $0.age > 1 }.subscribe() // This will unsubscribe from the subscription named "overOne". The "adults" and unnamed // subscription still remain. results2.unsubscribe()
注意
このメソッドは、サブスクライブを削除する更新トランザクションを開きます。 このメソッドを使用して、サーバーへの複数のサブスクリプションの変更をバッチ処理しないことをお勧めします。 複数のサブスクライブを一度にサブスクライブを解除するには、
SyncSubscription.update
を使用します。警告
結果に対して unsubscribe を呼び出しても、
Results
からローカル フィルターは削除されません。 unsubscribe を呼び出した後も、Realm のサブスクリプション セットに他のサブスクリプションが存在する可能性があるため、結果にはオブジェクトが含まれる可能性があります。警告
この API は現在
Preview
であり、将来変更される可能性があります。宣言
Swift
public func unsubscribe()
-
コレクションが変更されるたびに Vid を発行する出版社。
名前に関係なく、コレクションが変更された後にこれが実際に発行します。
宣言
Swift
public var objectWillChange: RealmPublishers.WillChange<Results> { get }