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
インスタンスの作成に使用されたConfiguration
の値。宣言
Swift
public var configuration: Configuration { get }
-
Realm にオブジェクトが含まれているかどうかを示します。
宣言
Swift
public var isEmpty: Bool { get }
-
デフォルトの 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
への呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。書込みトランザクションを開始する前に、
write
はrefresh()
が呼び出された場合と同様にRealm
インスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックを通知するようスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。
この関数に渡されるトークンは、書込みトランザクションが実行されているのと同じスレッドで追加された、この Realm の通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。
警告
この関数は非同期関数から安全に呼び出すことができません。代わりに
asyncWrite
を使用する必要があります。スロー
トランザクションが正常に完了できなかった場合は
NSError
。block
がスローした場合、関数は代わりに伝達された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
への呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。書込みトランザクションを開始する前に、
beginWrite
はrefresh()
が呼び出された場合と同様に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()
oldObject
とnewObject
はどちらも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 が現在非同期書込み操作を実行しているかどうかを示します。 これは、
beginAsyncWrite
、commitAsyncWrite
、またはwriteAsync
の呼び出し後にtrue
になり、スケジュールされたすべての非同期書込み作業が完了するまでその状態は維持されます。警告
これがtrue
の場合、Realm を閉じるか無効にすると、スケジュールされた作業が完了するまでブロックされます。宣言
Swift
public var isPerformingAsynchronousWriteOperations: Bool { get }
-
Realm に追加または作成されるオブジェクトに、すでに存在するプライマリキーがある場合の操作。
詳細はこちら宣言
Swift
@frozen public enum UpdatePolicy : Int
-
この Realm に管理されていないオブジェクトを追加します。
同じプライマリキーを持つオブジェクトがこの Realm にすでに存在する場合は、選択した
UpdatePolicy
によって指定される、このオブジェクトのプロパティ値で更新されます。 プライマリキーがないオブジェクトでは、更新ポリシーは.error
である必要があります。Realm にオブジェクトを追加すると、そのオブジェクトが参照するすべての子関係も追加されます(
Object
とList<Object>
プロパティを使用)。 これらのオブジェクトはこの Realm に追加する有効なオブジェクトでもある必要があり、update:
パラメータの値はそれらの追加に伝播されます。追加するオブジェクトは、管理されていないオブジェクトまたはこの Realm によってすでに管理されている有効なオブジェクトである必要があります。 この Realm によってすでに管理されているオブジェクトを追加する場合は何も行われませんが、別の Realm によって管理されているオブジェクトまたは Realm から削除されたオブジェクト(つまり、
isInvalidated
がtrue
であるオブジェクト)を追加する場合はエラーになります。管理対象オブジェクトを Realm から別の Realm にコピーするには、代わりに
create()
を使用します。警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。
宣言
Swift
public func add(_ object: Object, update: UpdatePolicy = .error)
パラメーター
object
この Realm に追加するオブジェクト。
update
同じプライマリキーを持つオブジェクトがすでに存在する場合の処理。 プライマリキーのないオブジェクトは
.error
である必要があります。 -
宣言
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 コレクション タイプ(Swiftsuffix(_:)
標準ライブラリ メソッドによって返されるタイプ)にスライスを渡しないでください。 代わりに、Array()
を使用して削除するオブジェクトのコピーを作成し、それを代わりに渡します。 自動更新コレクションにビューを直接渡すと、「限界外のインデックス」 の例外がスローされる可能性があります。警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。
宣言
Swift
public func delete<S>(_ objects: S) where S : Sequence, S.Element : RLMObjectBase
パラメーター
objects
削除するオブジェクト。 これは、
List<Object>
、Results<Object>
、または要素がObject
であるその他の SwiftSequence
にすることができます(上記の警告に従います)。 -
Realm からすべてのオブジェクトを削除します。
警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。宣言
Swift
public func deleteAll()
-
Realm に保存されている指定された型のすべてのオブジェクトを返します。
宣言
Swift
public func objects<Element>(_ type: Element.Type) -> Results<Element> where Element : RealmFetchable
パラメーター
type
返されるオブジェクトの型。
戻り値
オブジェクトを含む
Results
。 -
指定されたプライマリキーを持つ指定されたオブジェクトタイプの単一のインスタンスを Realm から検索します。
このメソッドでは、特定のオブジェクト クラスで
primaryKey()
がオーバーライドされる必要があります。詳細は、次を参照してください:
宣言
Swift
public func object<Element, KeyType>(ofType type: Element.Type, forPrimaryKey key: KeyType) -> Element? where Element : RealmSwiftObject
パラメーター
type
返されるオブジェクトの型。
key
目的のオブジェクトのプライマリキー。
戻り値
type
タイプのオブジェクト、または指定されたプライマリキーを持つインスタンスが存在しない場合はnil
のオブジェクト。
-
この Realm に加えられた変更の通知ハンドラーを追加し、通知トークンを返します。
通知ハンドラーは、スレッドやプロセスとは独立して、各書込みトランザクションがコミットされた後に呼び出されます。
ハンドラー ブロックは、追加されたのと同じスレッドで呼び出され、現在実行ループ内にあるスレッドにのみ追加できます。 バックグラウンド スレッドで実行ループを具体的に作成して実行している場合を除き、これは通常、メイン スレッドのみになります。
実行ループが他のアクティビティによってブロックされている限り、通知は配信されません。 通知をすぐに配信できない場合は、複数の通知が統合されることがあります。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。宣言
Swift
public func observe(_ block: @escaping NotificationBlock) -> NotificationToken
パラメーター
block
Realm 通知を処理するために呼び出されるブロック。 次のパラメータを受け取ります。
notification
: 受信通知。realm
: 通知が発生した Realm。戻り値
変更通知を引き続き受信する限り保持する必要があるトークン。
-
このプロパティを
true
に設定すると、他のスレッドで変更が発生したときにこの Realm を自動的に更新します。true
(デフォルト)に設定されている場合、他のスレッドで行われた変更は、変更がコミットされた後の実行ループの次のサイクルでこの Realm に反映されます。false
に設定されている場合、最新データを取得するには、Realm でrefresh()
を手動で呼び出して更新する必要があります。デフォルトでは、バックグラウンド スレッドにはアクティブな実行ループがないため、
autorefresh
がtrue
に設定されている場合でも、最新バージョンに更新するにはrefresh()
を手動で呼び出す必要があることに注意してください。このプロパティが有効になっている場合でも、自動更新が行われる前にいつでも
refresh()
を呼び出して Realm を更新できます。自動更新が有効になっているかどうかにかかわらず、書込みトランザクションがコミットされたときに通知が送信されます。
強力な参照がない
Realm
でautorefresh
を無効にしても効果はなく、次に Realm が作成されるときにautorefresh
はtrue
に戻ります。 これは通常、更新するものがないことを意味するため通常は関係ありません(管理対象のObject
、List
、Results
は、それらを管理する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 によって管理されているすべての
Object
、Results
、LinkingObjects
、List
を無効にします。Realm は、アクセスされるデータのバージョンに対して読み取りロックを保持するため、異なるスレッドで Realm に加えられた変更によって、この Realm が認識するデータが変更または削除されることはありません。 このメソッドを呼び出すと読み取りロックが解除され、ディスクで使用される領域は、ファイルを拡張するのではなく、後の書込みトランザクションで再利用できるようになります。 このメソッドは、以前に Realm から不要になったデータを読み込んだバックグラウンド スレッドで長時間のブロッキング操作を実行する前に呼び出す必要があります。
現在のスレッドでこの
Realm
インスタンスから取得されたすべてのObject
、Results
、およびList
インスタンスは無効化されます。Object
とArray
は使用できません。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
-
オブジェクトが変更されるたびに 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
-
-
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 }
戻り値
-
非対称オブジェクトを作成します。このオブジェクトは一方向に同期され、ローカルではクエリされません。 このメソッドを使用して、
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
-
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 をアクターに分離すると、
asyncWrite
とasyncRefresh
の使用も有効になります。ディスク上の ファイルの作成、移行、圧縮、同期された 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 をアクターに分離すると、
asyncWrite
とasyncRefresh
の使用も有効になります。ディスク上の ファイルの作成、移行、圧縮、同期された Realm がサーバーから最新データをダウンロードするの待機など、Realm の作業を準備するためのすべての初期化機能はバックグラウンド スレッドで実行され、呼び出し元のエグゼキュータをブロックしません。
スロー
Realm を初期化できなかった場合はNSError
。 タスクがキャンセルされた場合はCancellationError
。 -
asyncWrite(_:
非同期) 書込みトランザクション (write transaction) 内で指定されたブロックに含まれるアクションを実行します。
この関数は、スレッドをブロックするのではなく、書き込みを待つときに呼び出しタスクを一時停止するという点で同期
write
と異なります。 さらに、ディスクにデータを書き込む実際の I/O は、バックグラウンド ワーカー スレッドによって実行されます。 小規模な書込みの場合、メイン スレッドでこの関数を使用すると、バックグラウンド スレッドに書込みを手動でディスパッチするよりもメイン スレッドがブロックされる時間は短くなります。ブロックがエラーをスローした場合、トランザクションはキャンセルされ、エラーが発生する前に行われた変更はロールバックされます。
Realm ファイルごとに一度に開くことができる書込みトランザクションは 1 つだけです。 書込みトランザクションはネストできず、すでに書込みトランザクションが行われている Realm で書込みトランザクションを開始しようとすると、例外がスローされます。 他のスレッドまたは他のプロセス内の同じ Realm ファイルに対する
Realm
インスタンスからwrite
への呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。書込みトランザクションを開始する前に、
asyncWrite
はasyncRefresh()
が呼び出された場合と同様にRealm
インスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックの通知をスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。
この関数に渡されるトークンは、書込みトランザクションが実行されているのと同じアクターで追加された、この Realm の通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。
スロー
トランザクションが正常に完了できなかった場合は
NSError
。 タスクがキャンセルされた場合はCancellationError
。block
がスローした場合、関数は代わりに伝達された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
への呼び出しは、現在の書込みトランザクションが完了またはキャンセルされるまでブロックされます。書込みトランザクションを開始する前に、
asyncWrite
はasyncRefresh()
が呼び出された場合と同様にRealm
インスタンスを最新の Realm バージョンに更新し、該当する場合は通知を生成します。 Realm がすでに最新になっている場合、これは効果がありません。関連する通知トークンを渡すことで、この書込みトランザクションで行われた変更に関する特定の通知ブロックの通知をスキップできます。 これは主に、書込みトランザクションが UI ですでに行われた変更を保存しており、通知ブロックによる同じ変更の再適用の試行を避けたい場合に便利です。
この関数に渡されるトークンは、書込みトランザクションが実行されているのと同じアクターで追加された、この Realm の通知用のものである必要があります。 このメソッドを使用して、異なるスレッドの通知をスキップすることはできません。
スロー
トランザクションが正常に完了できなかった場合は
NSError
。 タスクがキャンセルされた場合はCancellationError
。block
がスローした場合、関数は代わりに伝達されたErrorType
をスローします。 -
Realm と Realm によって管理される未処理のオブジェクトを更新して、最新データを指し、該当する通知を送信します。
この関数は、ブロッキングではなく呼び出しタスク(必要な場合)を一時停止するため、非同期関数の同期
refresh
の代わりに使用する必要があります。警告
この関数は、メイン スレッドとアクター分離された Realm でのみサポートされています。 -
この 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 で解決するスレッド定義オブジェクトへのスレッドセーフな参照。