Realm

@frozen
public struct Realm
extension Realm: Equatable

Realmインスタンス(Realm とも呼ばれる)は、Realm データベースを表します。

Realm はディスク上( init(path:)を参照)またはメモリ( Configurationを参照)に保存できます。

Realm インスタンスは内部的にキャッシュされ、同等のRealmオブジェクト(たとえば、同じパスまたは識別子を使用)では限定的なオーバーヘッドが発生します。

Realmインスタンスが確実に破棄されるようにしたい場合(たとえば、Realm を開き、いくつかのプロパティを確認した後、Realm ファイルを削除して再度開きたい場合)は、Realm を使用するコードを配置しますautoreleasepool {}内で、それへの他の強力な参照がないことを確認します。

警告

停止していないRLMRealmインスタンスはスレッドされており、スレッドやディスパッチ キューとの間で共有することはできません。 そのような操作を試みると例外がスローされます。 Realm を操作するスレッドまたはキューごとにRLMRealmのインスタンスを取得する必要があります。 Realm は、 RLMRealmインスタンスを取得するときにキューを明示的に渡すことで、開かれるスレッドではなくディスパッチ キューに制限できます。 これが行われていない場合、キューは必ずしも同じスレッドで実行されるわけではないため、同じインスタンスを同じキューに複数のブロック ディスパッチで使用しようとすると失敗する可能性があります。

プロパティ

初期化子

  • デフォルトの Realm のインスタンスを取得します。

    デフォルトの Realm は、iOS 上のアプリケーションのドキュメントディレクトリおよび OS X 上のアプリケーションのアプリケーション サポートディレクトリにdefault.realmとして保存されます。

    デフォルトの Realm はデフォルトのConfigurationを使用して作成されます。これは、 Realm.Configuration.defaultConfigurationプロパティを新しい値に設定することで変更できます。

    スロー

    Realm を初期化できなかった場合はNSError

    宣言

    Swift

    public init(queue: DispatchQueue? = nil) throws

    パラメーター

    queue

    Realm を構成するためのオプションのディスパッチ キュー。 指定されている場合、この Realm インスタンスは現在のスレッドではなく、指定されたキューにディスパッチされたブロック内から使用できます。

  • 指定された構成を持つRealmインスタンスを取得します。

    スロー

    Realm を初期化できなかった場合はNSError

    宣言

    Swift

    public init(configuration: Configuration, queue: DispatchQueue? = nil) throws

    パラメーター

    configuration

    Realm の作成時に使用する構成値。

    queue

    Realm を構成するためのオプションのディスパッチ キュー。 指定されている場合、この Realm インスタンスは現在のスレッドではなく、指定されたキューにディスパッチされたブロック内から使用できます。

  • 指定されたファイル URL で永続化されたRealmインスタンスを取得します。

    スロー

    Realm を初期化できなかった場合はNSError

    宣言

    Swift

    public init(fileURL: URL) throws

    パラメーター

    fileURL

    Realm を保存するファイルのローカル URL。

非同期

  • 非同期に Realm を開き、指定されたキューのブロックに配信します。

    Realm を非同期に起動すると、指定されたキューにディスパッチする前に、バックグラウンド スレッド上で Realm を使用可能な状態に戻すために必要なすべての作業(時間がかかる可能性のある移行の実行など)がバックグラウンド スレッドで実行されます。 さらに、同期された Realm は、操作がローカルでダウンロードされ利用可能になった時点で利用可能なすべてのリモート コンテンツを待機します。

    コールバック関数に渡される Realm は、 Realm(configuration:queue:)が使用されていた場合と同様に、コールバック キューに制限されます。

    宣言

    Swift

    @discardableResult
    public static func asyncOpen(configuration: Realm.Configuration = .defaultConfiguration,
                                 callbackQueue: DispatchQueue = .main,
                                 callback: @escaping (Result<Realm, Swift.Error>) -> Void) -> AsyncOpenTask

    パラメーター

    configuration

    Realm を開くときに使用する構成オブジェクト。

    callbackQueue

    コールバックを実行するディスパッチ キュー。

    callback

    コールバック ブロック。 Realm が正常に開かれた場合は、 が引数として渡されます。 それ以外の場合は、問題を説明するSwift.Errorが代わりにブロックに渡されます。

    戻り値

    非同期オープンを監視またはキャンセルするために使用できるタスク オブジェクト。

  • 非同期に Realm を開き、指定されたキューのブロックに配信します。

    Realm を非同期に起動すると、指定されたキューにディスパッチする前に、バックグラウンド スレッド上で Realm を使用可能な状態に戻すために必要なすべての作業(時間がかかる可能性のある移行の実行など)がバックグラウンド スレッドで実行されます。 さらに、同期された Realm は、操作がローカルでダウンロードされ利用可能になった時点で利用可能なすべてのリモート コンテンツを待機します。

    パブリッシャーに渡される Realm は、 Realm(configuration:queue:)が使用されているかのようにコールバック キューに制限されています。

    宣言

    Swift

    @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
    public static func asyncOpen(configuration: Realm.Configuration = .defaultConfiguration) -> RealmPublishers.AsyncOpenPublisher

    パラメーター

    configuration

    Realm を開くときに使用する構成オブジェクト。

    callbackQueue

    AsyncOpenTask を実行するディスパッチ キュー。

    戻り値

    出版社。 Realm が正常に開かれると、サブスクライブによって受信されます。 それ以外の場合は、問題を説明するSwift.Errorが代わりに上流に渡されます。

  • 非同期オープンを観察またはキャンセルするために使用できるタスク オブジェクト。

    同期された Realm が非同期に開かれると、完了コールバックが呼び出される前に、Realm の最新の状態がサーバーからダウンロードされます。 このタスク オブジェクトは、ダウンロードの状態を確認したり、ダウンロードをキャンセルしたりするために使用できます。 これは、同期セッション自体が非同期で作成され、Realm.asyncOpen() が返すときにまだ存在しない可能性があるため、同期セッション経由でダウンロードを確認する代わりに使用する必要があります。

    詳細はこちら

    宣言

    Swift

    @frozen
    public struct AsyncOpenTask

トランザクション

  • 書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。

    ブロックがエラーをスローした場合、トランザクションはキャンセルされ、エラーが発生する前に行われた変更はロールバックされます。

    Realm ファイルごとに一度に開くことができる書込みトランザクションは 1 つだけです。 書込みトランザクションはネストできず、すでに書込みトランザクションが行われている Realm で書込みトランザクションを開始しようとすると、例外がスローされます。 他のスレッドまたは他のプロセス内の同じ Realm ファイルに対するRealmインスタンスからwriteへの呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。

    書込みトランザクションを開始する前に、 writerefresh()が呼び出された場合と同様にRealmインスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。

    関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックを通知するようスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。

    この関数に渡されるトークンは、書込みトランザクションが実行されているのと同じスレッドで追加された、この Realm の通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。

    警告

    この関数は非同期関数から安全に呼び出すことができません。代わりにasyncWriteを使用する必要があります。

    スロー

    トランザクションが正常に完了できなかった場合はNSErrorblockがスローした場合、関数は代わりに伝達されたErrorTypeをスローします。

    宣言

    Swift

    @discardableResult
    public func write<Result>(withoutNotifying tokens: [NotificationToken] = [], _ block: (() throws -> Result)) throws -> Result

    パラメーター

    tokens

    この書込みトランザクション (write transaction) で行われた変更について通知されないコールバックの追加から返された通知トークンの配列。

    block

    実行する アクション を含むブロック。

    戻り値

    ブロックから返された値(存在する場合)。

  • Realm で書込みトランザクション (write transaction) を開始します。

    Realm ファイルごとに一度に開くことができる書込みトランザクションは 1 つだけです。 書込みトランザクションはネストできず、すでに書込みトランザクションが行われている Realm で書込みトランザクションを開始しようとすると、例外がスローされます。 他のスレッドまたは他のプロセス内の同じ Realm ファイルに対するRealmインスタンスからbeginWriteへの呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。

    書込みトランザクションを開始する前に、 beginWriterefresh()が呼び出された場合と同様にRealmインスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。

    書込みトランザクションが実行ループの複数のサイクルにまたがる場合はまれに、書込みトランザクションがコミットされるまで、書込みトランザクションに参加する Realm が起動していることを確認する必要があります。

    警告

    この関数は非同期関数から安全に呼び出すことができません。代わりにasyncWriteを使用する必要があります。

    宣言

    Swift

    public func beginWrite()
  • 現在の書込みトランザクション内のすべての書込み操作をコミットし、トランザクションを終了します。

    変更を保存し、書込みトランザクションを完了すると、この特定のRealmインスタンスに登録されているすべての通知ブロックが同期的に呼び出されます。 他のスレッド上のRealmインスタンスの通知ブロックと、Realm コレクションに登録されたブロック(現在のスレッド上のブロックを含む)は、同期的に呼び出されるようにスケジュールされます。

    関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックを通知するようスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。

    この関数に渡されるトークンは、書込みトランザクションが実行されているのと同じスレッドで追加された、この Realm の通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    スロー

    ディスク容量不足やその他の I/O エラーによりトランザクションに書き込みができなかった場合は、 NSError

    宣言

    Swift

    public func commitWrite(withoutNotifying tokens: [NotificationToken] = []) throws

    パラメーター

    tokens

    この書込みトランザクション (write transaction) で行われた変更について通知されないコールバックの追加から返された通知トークンの配列。

  • 現在の書込みトランザクションで行われたすべての書込みを元に戻し、トランザクションを終了します。

    これにより、Realm 内のすべてのオブジェクトは、書込みトランザクション (write transaction) の開始時の状態にロールバックされ、トランザクションが終了します。

    これにより、削除されたオブジェクトのデータは復元されますが、無効化されたオブジェクト インスタンスは有効化されません。 Realm に追加されたObjectは、管理されなくなるのではなく、無効化されます。

    次のコードがあるとします。

    let oldObject = objects(ObjectType).first!
    let newObject = ObjectType()
    
    realm.beginWrite()
    realm.add(newObject)
    realm.delete(oldObject)
    realm.cancelWrite()
    

    oldObjectnewObject はどちらもtrue に対してisInvalidated を返しますが、oldObject を提供したクエリを再実行すると、有効なオブジェクトが再度返されます。

    トランザクション中に変更されたオブジェクトの KVE オブジェクトは、初期値に戻った変更について通知されますが、キャンセルされた書込みトランザクションによって他の通知は生成されません。

    この関数は、書込みトランザクションがどのように開始されたかに関係なく当てはまります。 具体的には、 writeまたはwriteAsyncに渡されるブロック内から呼び出すことができます。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    public func cancelWrite()
  • Realm が現在書込みトランザクション (write transaction) を実行しているかどうかを示します。

    警告

    このプロパティをチェックするだけで、オブジェクトを作成、更新、または削除する必要があるたびに書込みトランザクションを開始します。 指定すると、多数の書込みトランザクションが作成され、パフォーマンスが低下する恐れがあります。 代わりに、単一のトランザクション中に複数の更新を実行することを常に優先してください。

    宣言

    Swift

    public var isInWriteTransaction: Bool { get }

非同期トランザクション

  • 書込みトランザクション 内で指定されたブロックに含まれるアクションを非同期に実行します。 書込みトランザクションはbeginAsyncWriteを呼び出す場合と同様に非同期に開始され、デフォルトではブロックが完了した後にトランザクションは非同期にコミットされます。 ブロック内からcommitWriteまたはcancelWriteを明示的に呼び出して、書込みトランザクションを同期にコミットまたはキャンセルすることもできます。 これらの呼び出しのいずれも行わずに返すことは、 commitWriteを呼び出すことと同じです。

    @ param ブロック 実行するアクションを含むブロック。

    @ param completedBlock コミットが完了するかエラーで失敗すると、ソース スレッドまたはキューで呼び出されるブロック。

    @return 非同期トランザクションを識別する ID で、保留中のブロック呼び出しをキャンセルするためにブロックが呼び出される前にcancelAsyncWriteに渡すことができます。

    宣言

    Swift

    @discardableResult
    public func writeAsync(_ block: @escaping () -> Void, onComplete: ((Swift.Error?) -> Void)? = nil) -> AsyncTransactionId
  • 非同期書込みトランザクションを開始します。 この関数は、バックグラウンド スレッドで書込みトランザクションを非同期に開始し、トランザクションが開始されると元のスレッドまたはキューでブロックを呼び出します。 beginWriteとは異なり、書込みトランザクション内で別のスレッドが実行されている場合は、呼び出しスレッドをブロックすることはなく、常にすぐに返されます。 この関数(または非同期書込みトランザクションを実行する他の関数)を複数回呼び出すと、キューに入れられたのと同じ順序で呼び出されるブロックがキューに入れられます。 これには、同期トランザクションとは異なり、書込みトランザクション ブロック内からの呼び出しが含まれます。

    @ param asyncWriteBlock 書込みトランザクション内で実行するアクションを含むブロック。 asyncWriteBlockは、 commitAsyncWriteまたはcommitWriteを呼び出して終了する必要があります。 これらの呼び出しのいずれも行わずに返すことは、 cancelAsyncWriteを呼び出すことと同じです。

    @return 非同期トランザクションを識別する ID で、保留中のブロック呼び出しをキャンセルするためにブロックが呼び出される前にcancelAsyncWriteに渡すことができます。

    宣言

    Swift

    @discardableResult
    public func beginAsyncWrite(_ asyncWriteBlock: @escaping () -> Void) -> AsyncTransactionId
  • 書込みトランザクションを非同期にコミットします。 呼び出しは をすぐに返し、I/O が専用のバックグラウンド スレッドで実行されている間に呼び出し元の続行を許可します。 これは、書込みトランザクションがbeginWriteで開始されたか、 beginAsyncWriteで開始されたかに関係なく使用できます。

    @ param onComplete コミットが完了するかエラーで失敗すると、ソース スレッドまたはキューで呼び出されるブロック。

    @ param allowGrouping がtrueの場合、 commitAsyncWriteへの複数の連続した呼び出しをバッチして 1 つのグループに安定してストレージに永続化できます。 これにより、特にバッチされる個々のトランザクションが小さい場合に書込みパフォーマンスが向上します。 クラッシュや停電が発生した場合、コミットするための呼び出しが返されたすぐにデータが永続化されたことを保証する通常の保証ではなく、グループ化されたトランザクションのすべてが失われるか、トランザクションが正常に実行されないかのどちらかになります。

    @return 非同期トランザクションのコミットを識別する ID を 完了ブロックが呼び出される前にcancelAsyncWriteに渡して、ブロックの保留中の呼び出しをキャンセルします。 これはコミット自体をキャンセルしないことに注意してください。

    宣言

    Swift

    @discardableResult
    public func commitAsyncWrite(allowGrouping: Bool = false, _ onComplete: ((Swift.Error?) -> Void)? = nil) -> AsyncTransactionId
  • 非同期トランザクションのキューにあるブロックをキャンセルします。 これにより、非同期開始または非同期コミットに渡されたブロックをキャンセルできます。 開始をキャンセルすると、そのトランザクションは完全にキャンセルされますが、コミットをキャンセルすると完了コールバックの呼び出しがキャンセルされるだけで、コミットは引き続き実行されます。 トランザクションはブロックが呼び出される前にのみキャンセルでき、ブロック内からcancelAsyncWriteを呼び出す操作は必要ありません。

    @ param AsyncTransactionId beginAsyncWriteまたはcommitAsyncWriteのいずれかのトランザクション ID。

    宣言

    Swift

    public func cancelAsyncWrite(_ asyncTransactionId: AsyncTransactionId) throws
  • Realm が現在非同期書込み操作を実行しているかどうかを示します。 これは、 beginAsyncWritecommitAsyncWrite 、またはwriteAsyncの呼び出し後にtrueになり、スケジュールされたすべての非同期書込み作業が完了するまでその状態は維持されます。

    警告

    これがtrueの場合、Realm を閉じるか無効にすると、スケジュールされた作業が完了するまでブロックされます。

    宣言

    Swift

    public var isPerformingAsynchronousWriteOperations: Bool { get }

オブジェクトの追加と作成

  • Realm に追加または作成されるオブジェクトに、すでに存在するプライマリキーがある場合の操作。

    詳細はこちら

    宣言

    Swift

    @frozen
    public enum UpdatePolicy : Int
  • この Realm に管理されていないオブジェクトを追加します。

    同じプライマリキーを持つオブジェクトがこの Realm にすでに存在する場合は、選択したUpdatePolicyによって指定される、このオブジェクトのプロパティ値で更新されます。 プライマリキーがないオブジェクトでは、更新ポリシーは.errorである必要があります。

    Realm にオブジェクトを追加すると、そのオブジェクトが参照するすべての子関係も追加されます( ObjectList<Object>プロパティを使用)。 これらのオブジェクトはこの Realm に追加する有効なオブジェクトでもある必要があり、 update:パラメータの値はそれらの追加に伝播されます。

    追加するオブジェクトは、管理されていないオブジェクトまたはこの Realm によってすでに管理されている有効なオブジェクトである必要があります。 この Realm によってすでに管理されているオブジェクトを追加する場合は何も行われませんが、別の Realm によって管理されているオブジェクトまたは Realm から削除されたオブジェクト(つまり、 isInvalidatedtrueであるオブジェクト)を追加する場合はエラーになります。

    管理対象オブジェクトを Realm から別の Realm にコピーするには、代わりにcreate()を使用します。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    public func add(_ object: Object, update: UpdatePolicy = .error)

    パラメーター

    object

    この Realm に追加するオブジェクト。

    update

    同じプライマリキーを持つオブジェクトがすでに存在する場合の処理。 プライマリキーのないオブジェクトは.errorである必要があります。

  • コレクション内のすべてのオブジェクトを Realm に追加します。

    詳細は、次を参照してください:

    add(_:update:)

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    public func add<S>(_ objects: S, update: UpdatePolicy = .error) where S : Sequence, S.Element : RealmSwiftObject

    パラメーター

    objects

    Realm に追加するオブジェクトを含むシーケンス。

    update

    この Realm にすでに存在するプライマリキーを持つ コレクション内のオブジェクトを処理する方法。 プライマリキーのないオブジェクトタイプの場合は、 .errorである必要があります。

    update

    この Realm にすでに存在するプライマリキーを持つ コレクション内のオブジェクトを処理する方法。 プライマリキーのないオブジェクトタイプの場合は、 .errorである必要があります。

  • 指定された値を持つ Realm オブジェクトを作成し、その値を Realm に追加して返します。

    value引数は、Realm オブジェクト、キー値コーディング準拠オブジェクト、 NSJSONSerializationのメソッドから返された配列または辞書、または管理対象プロパティごとに 1 つの要素を含むArrayにすることができます。 単独またはコレクションのノードとして、 LinkingObjectsインスタンスを渡しません。 value引数が配列の場合、すべてのプロパティが存在し、有効で、モデルで定義されたプロパティと同じ順序で存在する必要があります。

    オブジェクトタイプにプライマリキーがない場合、または指定されたプライマリキーを持つオブジェクトがまだ存在しない場合は、Realm に新しいオブジェクトが作成されます。 指定されたプライマリキーを持つオブジェクトが Realm にすでに存在し、更新ポリシーが.modifiedまたは.allの場合、既存のオブジェクトが更新され、そのオブジェクトへの参照が返されます。

    オブジェクトが更新されている場合、そのスキーマで定義されているすべてのプロパティは、キーと値のコーディングを使用してvalueからコピーされることによって設定されます。 value引数が特定のプロパティ名(または定義されている場合は getter 名)のvalue(forKey:)に応答しない場合、その値は影響を受けません。 オブジェクトの null 可能なプロパティは、更新された値としてNSNullを使用するか、( Objectサブクラスのインスタンスを渡している場合) valueの対応するプロパティを nil に設定することで nil に設定できます。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    @discardableResult
    public func create<T>(_ type: T.Type, value: Any = [String: Any](), update: UpdatePolicy = .error) -> T where T : RealmSwiftObject

    パラメーター

    type

    作成するオブジェクトのタイプ。

    value

    オブジェクトを入力するために使用される値。

    update

    同じプライマリキーを持つオブジェクトがすでに存在する場合の処理。 プライマリキーのないオブジェクトタイプの場合は、 .errorである必要があります。

    戻り値

    新しく作成されたオブジェクト。

オブジェクトの削除

  • Realm からオブジェクトを削除します。 オブジェクトが削除されると、無効化されたと見なされます。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    public func delete(_ object: ObjectBase)

    パラメーター

    object

    削除するオブジェクト。

  • Realm から 0 個以上のオブジェクトを削除します。

    Resultsまたはその他の自動更新 Realm コレクション タイプ(Swift suffix(_:)標準ライブラリ メソッドによって返されるタイプ)にスライスを渡しないでください。 代わりに、 Array()を使用して削除するオブジェクトのコピーを作成し、それを代わりに渡します。 自動更新コレクションにビューを直接渡すと、「限界外のインデックス」 の例外がスローされる可能性があります。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    public func delete<S>(_ objects: S) where S : Sequence, S.Element : RLMObjectBase

    パラメーター

    objects

    削除するオブジェクト。 これは、 List<Object>Results<Object> 、または要素がObjectであるその他の Swift Sequenceにすることができます(上記の警告に従います)。

  • Realm からすべてのオブジェクトを削除します。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    public func deleteAll()

オブジェクト検索

  • Realm に保存されている指定された型のすべてのオブジェクトを返します。

    宣言

    Swift

    public func objects<Element>(_ type: Element.Type) -> Results<Element> where Element : RealmFetchable

    パラメーター

    type

    返されるオブジェクトの型。

    戻り値

    オブジェクトを含むResults

  • 指定されたプライマリキーを持つ指定されたオブジェクトタイプの単一のインスタンスを Realm から検索します。

    このメソッドでは、特定のオブジェクト クラスでprimaryKey()がオーバーライドされる必要があります。

    詳細は、次を参照してください:

    Object.primaryKey()

    宣言

    Swift

    public func object<Element, KeyType>(ofType type: Element.Type, forPrimaryKey key: KeyType) -> Element? where Element : RealmSwiftObject

    パラメーター

    type

    返されるオブジェクトの型。

    key

    目的のオブジェクトのプライマリキー。

    戻り値

    typeタイプのオブジェクト、または指定されたプライマリキーを持つインスタンスが存在しない場合はnilのオブジェクト。

notifications

  • この Realm に加えられた変更の通知ハンドラーを追加し、通知トークンを返します。

    通知ハンドラーは、スレッドやプロセスとは独立して、各書込みトランザクションがコミットされた後に呼び出されます。

    ハンドラー ブロックは、追加されたのと同じスレッドで呼び出され、現在実行ループ内にあるスレッドにのみ追加できます。 バックグラウンド スレッドで実行ループを具体的に作成して実行している場合を除き、これは通常、メイン スレッドのみになります。

    実行ループが他のアクティビティによってブロックされている限り、通知は配信されません。 通知をすぐに配信できない場合は、複数の通知が統合されることがあります。

    アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンでinvalidate()を呼び出します。

    宣言

    Swift

    public func observe(_ block: @escaping NotificationBlock) -> NotificationToken

    パラメーター

    block

    Realm 通知を処理するために呼び出されるブロック。 次のパラメータを受け取ります。 notification : 受信通知。 realm : 通知が発生した Realm。

    戻り値

    変更通知を引き続き受信する限り保持する必要があるトークン。

自動更新と更新

  • このプロパティをtrueに設定すると、他のスレッドで変更が発生したときにこの Realm を自動的に更新します。

    true (デフォルト)に設定されている場合、他のスレッドで行われた変更は、変更がコミットされた後の実行ループの次のサイクルでこの Realm に反映されます。 falseに設定されている場合、最新データを取得するには、Realm でrefresh()を手動で呼び出して更新する必要があります。

    デフォルトでは、バックグラウンド スレッドにはアクティブな実行ループがないため、 autorefreshtrueに設定されている場合でも、最新バージョンに更新するにはrefresh()を手動で呼び出す必要があることに注意してください。

    このプロパティが有効になっている場合でも、自動更新が行われる前にいつでもrefresh()を呼び出して Realm を更新できます。

    自動更新が有効になっているかどうかにかかわらず、書込みトランザクションがコミットされたときに通知が送信されます。

    強力な参照がないRealmautorefreshを無効にしても効果はなく、次に Realm が作成されるときにautorefreshtrueに戻ります。 これは通常、更新するものがないことを意味するため通常は関係ありません(管理対象のObjectListResultsは、それらを管理するRealmへの強力な参照を持っています)が、 autorefresh = falseを設定することを意味しますapplication(_:didFinishLaunchingWithOptions:) 以降の例では、Realm オブジェクトの保存が機能しません。

    デフォルトは true です。

    宣言

    Swift

    public var autorefresh: Bool { get nonmutating set }
  • Realm と Realm によって管理される未処理のオブジェクトを更新して、最新データを指し、該当する通知を送信します。

    デフォルトでは、Realm はこの関数で可能よりも効率的な方法で自動的に更新されます。 この関数は可能な限り回避する必要があります。

    警告

    この関数は非同期関数から安全に呼び出すことができません。代わりにasyncRefreshを使用する必要があります。

    宣言

    Swift

    @discardableResult
    public func refresh() -> Bool

    戻り値

    Realm で更新が行われたかどうか。 実際にデータが変更されない場合でも、 trueが返される場合があることに注意してください。

凍結された邦土

  • この Realm が固定されている場合は を返します。

    宣言

    Swift

    public var isFrozen: Bool { get }
  • この Realm の固定(不変)スナップショットを返します。

    固定された Realm は、Realm のデータの特定のバージョンの不変のスナップショット ビューです。 通常の Realm インスタンスとは異なり、Realm に行われた書込みを反映するためのライブアップデートは行われないため、任意のスレッドからアクセスできます。 固定された Realm への書込みは許可されておらず、書込みトランザクションを開始しようとすると例外がスローされます。

    固定された Realm から読み取られるすべてのオブジェクトとコレクションも固定されます。

    警告

    Realm で書込みトランザクションを実行中に固定された Realm を長時間保持すると、Realm ファイルのサイズが大きくなる可能性があります。 詳しくは、 Realm.Configuration.maximumNumberOfActiveVersionsを参照してください。

    宣言

    Swift

    public func freeze() -> Realm
  • この Realm のライブ(可変)参照を返します。

    返された Realm 参照から読み取られたすべてのオブジェクトとコレクションは、固定されなくなります。 まだ固定されていない Realm で呼び出されると自分自身が返されます。

    宣言

    Swift

    public func thaw() -> Realm
  • 指定されたオブジェクトの固定(不変)スナップショットを返します。

    固定されたコピーは、指定されたオブジェクトが現在含まれているデータと同じデータを含む不変のオブジェクトですが、含まれている Realm に書込み (write) が行われても更新されません。 ライブオブジェクトと違い、固定オブジェクトには任意のスレッドからアクセスできます。

    警告

    Realm で書込みトランザクションを実行中に固定されたオブジェクトを長時間保持すると、Realm ファイルのサイズが大きくなる可能性があります。 詳しくは、 Realm.Configuration.maximumNumberOfActiveVersionsを参照してください。

    宣言

    Swift

    public func freeze<T>(_ obj: T) -> T where T : RLMObjectBase
  • このオブジェクトのライブ(可変)参照を返します。

    このメソッドでは、同じ固定オブジェクトのライブ コピーへの管理対象アアクセス権が作成されます。 すでに存在するオブジェクトで呼び出される場合は、自分自身を返します。

    宣言

    Swift

    public func thaw<T>(_ obj: T) -> T? where T : RLMObjectBase
  • 指定されたコレクションの固定(不変)スナップショットを返します。

    固定コピーは、特定のコレクションに現在含まれているデータと同じデータを含む不変のコレクションですが、含まれている Realm への書込み (write) が行われても更新されません。 ライブコレクションとは異なり、固定コレクションには任意のスレッドからアクセスできます。

    警告

    このメソッドは、書込みトランザクション中、または Realm が読み取り専用の場合に呼び出すことができません。

    警告

    Realm で書込みトランザクションを実行中に固定されたコレクションを長時間保持すると、Realm ファイルのサイズが大きくなる可能性があります。 詳しくは、 Realm.Configuration.maximumNumberOfActiveVersionsを参照してください。

    宣言

    Swift

    public func freeze<Collection>(_ collection: Collection) -> Collection where Collection : RealmCollection

無効化

  • Realm によって管理されているすべてのObjectResultsLinkingObjectsListを無効にします。

    Realm は、アクセスされるデータのバージョンに対して読み取りロックを保持するため、異なるスレッドで Realm に加えられた変更によって、この Realm が認識するデータが変更または削除されることはありません。 このメソッドを呼び出すと読み取りロックが解除され、ディスクで使用される領域は、ファイルを拡張するのではなく、後の書込みトランザクションで再利用できるようになります。 このメソッドは、以前に Realm から不要になったデータを読み込んだバックグラウンド スレッドで長時間のブロッキング操作を実行する前に呼び出す必要があります。

    現在のスレッドでこのRealmインスタンスから取得されたすべてのObjectResults 、およびListインスタンスは無効化されます。 ObjectArrayは使用できません。 Resultsは空になります。 Realm 自体は有効なままであり、次に Realm からデータが読み取られるときに、新しい読み取りトランザクションが暗黙的に開始されます。

    Realm からのデータを読み込まずに、または Realm からのデータを読み取る前に、このメソッドを複数回連続で呼び出すと、操作は実行されません。

    宣言

    Swift

    public func invalidate()

ファイル管理

  • 指定されたローカル URL に Realm の圧縮され、オプションで暗号化されたコピーを書込みます。

    宛先ファイルがすでに存在することはできません。

    このメソッドが書込みトランザクション (write transaction) 内から呼び出されると、前の書込みトランザクションがコミットされた時点のデータではなく、現在のデータが書き込まれることに注意してください。

    スロー

    コピーを書き込めなかった場合はNSError

    宣言

    Swift

    public func writeCopy(toFile fileURL: URL, encryptionKey: Data? = nil) throws

    パラメーター

    fileURL

    Realm を保存するためのローカル URL。

    encryptionKey

    新しいファイルを暗号化するための任意の 64 バイト暗号化キー。

  • 指定された構成で指定された指定された場所に Realm のコピーを書込みます。

    提供された構成がUserから派生している場合、この Realm は同期機能を有効にしてコピーされます。

    宛先ファイルがすでに存在することはできません。

    スロー

    コピーを書き込めなかった場合はNSError

    宣言

    Swift

    public func writeCopy(configuration: Realm.Configuration) throws

    パラメーター

    configuration

    Realm 構成。

  • 指定された構成の Realm ファイルがディスク上にローカルに存在するかどうかを確認します。

    非同期、メモリ内以外の Realm の場合、これはFileManager.default.fileExists(atPath:)と同じです。 同期された Realm の場合、Realm を開くときに実行されるように、サーバー、仮想パス、ユーザーに基づいてディスク上の実際のパスを計算します。

    @ param config の有無を確認するための Realm 構成。 @return 指定された構成の Realm ファイルがディスクに存在する場合は true、それ以外の場合は false を返します。

    宣言

    Swift

    public static func fileExists(for config: Configuration) -> Bool
  • 指定された構成のローカル Realm ファイルと関連する一時ファイルを削除します。

    これにより、特定の構成で Realm を開くことで作成される「.realm」、「.note」、および「.management」ファイルが削除されます。 .lock ファイル(永続化されたデータを含まず、Realm ファイルが開かれるたびに最初から再作成される)は削除されません。

    Realm は現在、スレッドまたは別のプロセスで開いてはなりません。 その場合、.alreadyOpen というエラーがスローされます。 削除が発生している間に別のスレッドで Realm を開こうとするとブロックされ、その後新しい Realm を作成してそれを開きます。

    Realm がすでに存在しない場合は、 falseが返されます。

    @ param config 削除する Realm を識別する Realm 構成。 @return ファイルが削除された場合は true、それ以外の場合は false です。

    宣言

    Swift

    public static func deleteFiles(for config: Configuration) throws -> Bool

Realm

  • オブジェクトが変更されるたびに Vid を発行する出版社。

    名前に関係なく、コレクションが変更されたにこれが実際に発行します。

    宣言

    Swift

    public var objectWillChange: RealmPublishers.RealmWillChange { get }
  • Realm エラー ドメイン内のエラー コードを記述する構造体。 値は、特に Realm インスタンスの初期化時に発生するさまざまな回復可能なエラーをキャッチするために使用できます。

    let realm: Realm?
    do {
        realm = try Realm()
    } catch Realm.Error.incompatibleLockFile {
        print("Realm Browser app may be attached to Realm on device?")
    }
    

    宣言

    Swift

    public typealias Error = RLMError
  • 宣言

    Swift

    extension Realm.Error
    extension Realm.Error: Equatable

等価

  • Realm のイベント コンテキストを取得します。 Realm を開くときにEventConfigurationが設定されていない限り、 nilになります。

    宣言

    Swift

    public var events: Events? { get }
  • 指定されたパスにある Realm で指定された Realm 構成の移行ブロックを実行します。

    このメソッドは Realm を初めて開くときに自動的に呼び出され、明示的に呼び出す必要はありません。 このメソッドを呼び出すことで、移行がいつどのように実行されるかを正確に制御できます。

    宣言

    Swift

    public static func performMigration(for configuration: Realm.Configuration = Realm.Configuration.defaultConfiguration) throws

    パラメーター

    configuration

    Realm のオープンと移行に使用される Realm 構成。

同期サブスクリプション

  • このRealm のアクティブなサブスクリプションを表すSyncSubscriptionSetのインスタンスを返します。これは、柔軟な同期サブスクライブの追加/削除/更新や検索に使用できます。 ローカルまたはパーティションベースで構成されたRealmからサブスクリプションを取得すると、例外がスローされます。

    警告

    この機能は現在betaであり、そのAPIは変更される可能性があります。

    宣言

    Swift

    public var subscriptions: SyncSubscriptionSet { get }

    戻り値

    A SyncSubscriptionSet

非対称同期

  • 非対称オブジェクトを作成します。このオブジェクトは一方向に同期され、ローカルではクエリされません。 このメソッドを使用して、 AsymmetricObjectから継承するオブジェクトのみを作成できます。

    このメソッドを使用して作成されたオブジェクトは、Realm に追加されません。

    警告

    このメソッドは、書込みトランザクション中にのみ呼び出されます。

    宣言

    Swift

    public func create<T>(_ type: T.Type, value: Any = [String: Any]()) where T : RealmSwiftAsymmetricObject

    パラメーター

    type

    作成するオブジェクトのタイプ。

    value

    オブジェクトを入力するために使用される値。

等価

  • 2 つのRealmインスタンスが等しいかどうかを返します。

    宣言

    Swift

    public static func == (lhs: Realm, rhs: Realm) -> Bool

notifications

  • Realm に変更が加えられたことを示す通知。

    詳細はこちら

    宣言

    Swift

    @frozen
    public enum Notification : String
  • 同期された Realm を開く前に、サーバーからすべてのデータをダウンロードするタイミングのオプション。

    詳細はこちら

    宣言

    Swift

    @frozen
    public enum OpenBehavior : Sendable
  • 指定された構成を持つRealmインスタンスを、通常は非同期に取得します。 デフォルトでは、同期初期化が使用された場合と同様に Realm インスタンスが完全に返されます。 オプションにより、代わりに Realm を非同期に開き、Realm をバックグラウンド スレッドで使用可能な状態にするために必要なすべての作業を実行することができます。 ローカル Realm の場合、移行がバックグラウンドで実行され、同期された Realm の場合は、Realm が返される前にすべてのデータがサーバーからダウンロードされます。

    スロー

    Realm を初期化できなかった場合はNSError

    宣言

    Swift

    @MainActor
    public init(configuration: Realm.Configuration = .defaultConfiguration,
                downloadBeforeOpen: OpenBehavior = .never) async throws

    パラメーター

    configuration

    Realm を開くときに使用する構成オブジェクト。

    downloadBeforeOpen

    を開くと、Realm はまず、サーバーからすべてのデータをダウンロードする必要があります。

    戻り値

    オープン Realm。

  • 指定されたアクターに分離されたRealmインスタンスを非同期に取得します。

    アクターを使用して Realm を起動すると、Realm がそのアクターに分離されます。 Realmが開かれた特定のスレッドに限定されるのではなく、そのアクターまたはそのアクターに分離された関数内からのみRealmできます。 Realm をアクターに分離すると、 asyncWriteasyncRefreshの使用も有効になります。

    ディスク上の ファイルの作成、移行、圧縮、同期された Realm がサーバーから最新データをダウンロードするの待機など、Realm の作業を準備するためのすべての初期化機能はバックグラウンド スレッドで実行され、呼び出し元のエグゼキュータをブロックしません。

    アクター分離された Realm を使用する場合は、構造体の同時実行チェック(Xcode でSWIFT_STRICT_CONCURRENCY=complete )とランタイム データ競合検出(コンパイラーに-Xfrontend -enable-actor-data-race-checksを渡すこと)を有効にすることが強くおすすめされます。

    スロー

    Realm を初期化できなかった場合はNSError 。 タスクがキャンセルされた場合はCancellationError

    宣言

    Swift

    public init<A: Actor>(configuration: Realm.Configuration = .defaultConfiguration,
                          actor: A,
                          downloadBeforeOpen: OpenBehavior = .never) async throws

    パラメーター

    configuration

    Realm を開くときに使用する構成オブジェクト。

    actor

    この Realm を構成するアクター。 アクターは、ローカル アクターとグローバル アクターのいずれかになります。 呼び出し関数は、渡されるアクターに分離する必要はありませんが、そうでない場合は返された Realm を使用できません。

    downloadBeforeOpen

    を開くと、Realm はまず、サーバーからすべてのデータをダウンロードする必要があります。

    戻り値

    オープン Realm。

  • 現在のアクターに分離されたRealmインスタンスを非同期に取得します。

    アクターを使用して Realm を起動すると、Realm がそのアクターに分離されます。 Realmが開かれた特定のスレッドに限定されるのではなく、そのアクターまたはそのアクターに分離された関数内からのみRealmできます。 Realm をアクターに分離すると、 asyncWriteasyncRefreshの使用も有効になります。

    ディスク上の ファイルの作成、移行、圧縮、同期された Realm がサーバーから最新データをダウンロードするの待機など、Realm の作業を準備するためのすべての初期化機能はバックグラウンド スレッドで実行され、呼び出し元のエグゼキュータをブロックしません。

    スロー

    Realm を初期化できなかった場合はNSError 。 タスクがキャンセルされた場合はCancellationError
  • asyncWrite(_:) 非同期

    書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。

    この関数は、スレッドをブロックするのではなく、書き込みを待つときに呼び出しタスクを一時停止するという点で同期writeと異なります。 さらに、ディスクにデータを書き込む実際の I/O は、バックグラウンド ワーカー スレッドによって実行されます。 小規模な書込みの場合、メイン スレッドでこの関数を使用すると、バックグラウンド スレッドに書込みを手動でディスパッチするよりもメイン スレッドがブロックされる時間は短くなります。

    ブロックがエラーをスローした場合、トランザクションはキャンセルされ、エラーが発生する前に行われた変更はロールバックされます。

    Realm ファイルごとに一度に開くことができる書込みトランザクションは 1 つだけです。 書込みトランザクションはネストできず、すでに書込みトランザクションが行われている Realm で書込みトランザクションを開始しようとすると、例外がスローされます。 他のスレッドまたは他のプロセス内の同じ Realm ファイルに対するRealmインスタンスからwriteへの呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。

    書込みトランザクションを開始する前に、 asyncWriteasyncRefresh()が呼び出された場合と同様にRealmインスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。

    関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックの通知をスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。

    この関数に渡されるトークンは、書込みトランザクションが実行されているのと同じアクターで追加された、この Realm の通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。

    スロー

    トランザクションが正常に完了できなかった場合はNSError 。 タスクがキャンセルされた場合はCancellationErrorblockがスローした場合、関数は代わりに伝達されたErrorTypeをスローします。

    宣言

    Swift

    @discardableResult
    @_unsafeInheritExecutor
    public func asyncWrite<Result>(_ block: (() throws -> Result)) async throws -> Result

    パラメーター

    tokens

    この書込みトランザクション (write transaction) で行われた変更について通知されないコールバックの追加から返された通知トークンの配列。

    block

    実行する アクション を含むブロック。

    戻り値

    ブロックから返された値(存在する場合)。

  • asyncRefresh() 非同期

    Realm と Realm によって管理される未処理のオブジェクトを更新して、最新データを指し、該当する通知を送信します。

    この関数は、ブロッキングではなく呼び出しタスク(必要な場合)を一時停止するため、非同期関数の同期refreshの代わりに使用する必要があります。

    警告

    この関数は、メイン スレッドとアクター分離された Realm でのみサポートされています。

    宣言

    Swift

    @discardableResult
    @_unsafeInheritExecutor
    public func asyncRefresh() async -> Bool

    戻り値

    Realm で更新が行われたかどうか。 実際にデータが変更されない場合でも、 trueが返される場合があることに注意してください。

  • 書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。

    この関数は、スレッドをブロックするのではなく、書き込みを待つときに呼び出しタスクを一時停止するという点で同期writeと異なります。 さらに、ディスクにデータを書き込む実際の I/O は、バックグラウンド ワーカー スレッドによって実行されます。 小規模な書込みの場合、メイン スレッドでこの関数を使用すると、バックグラウンド スレッドに書込みを手動でディスパッチするよりもメイン スレッドがブロックされる時間は短くなります。

    ブロックがエラーをスローした場合、トランザクションはキャンセルされ、エラーが発生する前に行われた変更はロールバックされます。

    Realm ファイルごとに一度に開くことができる書込みトランザクションは 1 つだけです。 書込みトランザクションはネストできず、すでに書込みトランザクションが行われている Realm で書込みトランザクションを開始しようとすると、例外がスローされます。 他のスレッドまたは他のプロセス内の同じ Realm ファイルに対するRealmインスタンスからwriteへの呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。

    書込みトランザクションを開始する前に、 asyncWriteasyncRefresh()が呼び出された場合と同様にRealmインスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。

    関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックの通知をスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。

    この関数に渡されるトークンは、書込みトランザクションが実行されているのと同じアクターで追加された、この Realm の通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。

    スロー

    トランザクションが正常に完了できなかった場合はNSError 。 タスクがキャンセルされた場合はCancellationErrorblockがスローした場合、関数は代わりに伝達されたErrorTypeをスローします。

  • Realm と Realm によって管理される未処理のオブジェクトを更新して、最新データを指し、該当する通知を送信します。

    この関数は、ブロッキングではなく呼び出しタスク(必要な場合)を一時停止するため、非同期関数の同期refreshの代わりに使用する必要があります。

    警告

    この関数は、メイン スレッドとアクター分離された Realm でのみサポートされています。
  • Configurationインスタンスでは、Realm のインスタンスを作成するために使用されるさまざまなオプションについて説明します。

    Configuration インスタンスは単純な Swift 構造体です。 RealmObjectとは異なり、ミューテーションがない限り、スレッド間で自由に共有できます。

    クラス サブセットの構成値の作成( objectClassesプロパティの設定)にはコストがかかる場合があります。 このため、Realm を開くたびに新しい値を作成するのではなく、通常、個別の構成ごとに 1 つの構成値をキャッシュして再利用することをお勧めします。

    詳細はこちら

    宣言

    Swift

    @frozen
    public struct Configuration : Sendable
    extension Realm.Configuration: CustomStringConvertible
    extension Realm.Configuration: Equatable
  • この Realm で使用される SyncSession を取得します。 これが同期された Realm でない場合は nil になります。

    宣言

    Swift

    public var syncSession: SyncSession? { get }

スレッドセーフな参照

  • ThreadSafeReferenceが最初に作成されたときに参照されたオブジェクトと同じオブジェクトを返しますが、このスレッドの現在の Realm では解決されたオブジェクトを返します。 参照が作成された後にこのオブジェクトが削除された場合はnilを返します。

    警告

    ThreadSafeReferenceオブジェクトは最大 1 回で解決される必要があります。 ThreadSafeReferenceを解決しないと、参照が再割り当てされるまで、Realm のソース バージョンが固定されます。 参照が複数回解決された場合は例外がスローされます。

    警告

    書込みトランザクション (write transaction) 内で を呼び出せません。

    注意

    ソース Realm がこれよりも後のバージョンであった場合は、この Realm を更新します。

    詳細は、次を参照してください:

    ThreadSafeReference(to:)

    宣言

    Swift

    public func resolve<Confined>(_ reference: ThreadSafeReference<Confined>) -> Confined? where Confined : ThreadConfined

    パラメーター

    reference

    この Realm で解決するスレッド定義オブジェクトへのスレッドセーフな参照。