埋め込みオブジェクト

@objc(RealmSwiftEmbeddedObject)
open class EmbeddedObject : RLMObjectBase, RealmCollectionValue
extension EmbeddedObject: ThreadConfined

EmbeddedObject は、埋め込み Realm モデル オブジェクトを定義するために使用される基本クラスです。

埋め込みオブジェクトは通常のオブジェクトと同様に機能しますが、単一の親オブジェクト(それ自体が埋め込まれる場合)によって所有されます。 通常の最上位オブジェクトとは異なり、埋め込みオブジェクトを で直接作成したり、Realm に追加したりすることはできません。 代わりに、親オブジェクトの一部として、または管理されていないオブジェクトを親オブジェクトの プロパティに割り当てた場合にのみ作成できます。 埋め込みオブジェクトは、親オブジェクトが削除されるか、親が埋め込みオブジェクトを指すように変更されると、 オブジェクト プロパティを再割り当てするか、それを含むリストから埋め込みオブジェクトを削除して、自動的に削除されます。

埋め込みオブジェクトには、それらにリンクする親オブジェクトが 1 つだけあるため、既存の管理対象オブジェクトにリンクしようとすると例外がスローされます。

EmbeddedObjectでサポートされているプロパティ タイプはObjectと同じですが、埋め込みオブジェクトが最上位オブジェクトにリンクできないため、 ObjectList<Object>プロパティはサポートされていません( EmbeddedObjectList<EmbeddedObject>)です。

埋め込みオブジェクトにはプライマリキーまたはインデックス付きプロパティを含めることはできません。

class Owner: Object {
    @objc dynamic var name: String = ""
    let dogs = List<Dog>()
}
class Dog: EmbeddedObject {
    @objc dynamic var name: String = ""
    @objc dynamic var adopted: Bool = false
    let owner = LinkingObjects(fromType: Owner.self, property: "dogs")
}

初期化子

  • Realm オブジェクトの非マネージド インスタンスを作成します。

    管理されていない埋め込みオブジェクトは、管理対象オブジェクトのプロパティに割り当てるか、管理対象のリストに追加することで、Realm に追加できます。

    宣言

    Swift

    public override required init()
  • Realm オブジェクトの非マネージド インスタンスを作成します。

    value引数はオブジェクトにデータを入力するために使用されます。 キーと値に準拠したオブジェクト、 NSJSONSerializationのメソッドから返された配列または辞書、または管理されているプロパティごとに 1 つの要素を含むArrayにすることができます。 必須 プロパティが存在せず、それらのプロパティがデフォルト値で定義されていない場合は、例外がスローされます。

    value引数としてArrayを渡す場合、すべてのプロパティが存在し、有効で、モデルで定義されたプロパティと同じ順序にある必要があります。

    管理されていない埋め込みオブジェクトは、管理対象オブジェクトのプロパティに割り当てるか、管理対象のリストに追加することで、Realm に追加できます。

    宣言

    Swift

    public convenience init(value: Any)

    パラメーター

    value

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

プロパティ

  • オブジェクトを管理する Realm。オブジェクトが管理されていない場合はnil

    宣言

    Swift

    public var realm: Realm? { get }
  • オブジェクトの管理対象プロパティを一覧表示するオブジェクト スキーマ。

    宣言

    Swift

    public var objectSchema: ObjectSchema { get }
  • オブジェクトが無効になったためアクセスできなくなっているかどうかを示します。

    オブジェクトを管理する Realm からオブジェクトが削除された場合、またはその Realm でinvalidate()が呼び出された場合は、オブジェクトにアクセスできなくなります。

    宣言

    Swift

    public override final var isInvalidated: Bool { get }
  • 人間が判読可能なオブジェクトの説明。

    宣言

    Swift

    open override var description: String { get }

オブジェクトカスタマイズ

  • このメソッドをオーバーライドして、無視するプロパティの名前を指定します。 これらのプロパティは、オブジェクトを管理する Realm によって管理されません。

    宣言

    Swift

    @objc
    open class func ignoredProperties() -> [String]

    戻り値

    無視するプロパティ名の配列。

キー値のコーディングとサブスクリプション

  • 指定された名前のプロパティの値を返すか設定します。

    宣言

    Swift

    @objc
    open subscript(key: String) -> Any? { get set }

notifications

  • オブジェクトが変更されるたびに呼び出されるブロックを登録します。

    ブロックは、オブジェクトを削除する、またはプロパティを既存の値に設定する自己割り当てを含む、オブジェクトの管理されているプロパティのいずれかを変更する各書込みトランザクションの後に非同期に呼び出されます。

    異なるスレッドまたは異なるプロセスで実行される書込みトランザクションの場合、ブロックは管理 Realm が変更を含むバージョンに(自動)更新されたときに呼び出されますが、ローカルの書込みトランザクションでは、将来のある時点で呼び出されます書込みトランザクション (write transaction) がコミットされた場合。

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

    ListResultsとは異なり、新しい通知ブロックを追加した後に実行される初期コールバックはありません。

    この方法では、Realm によって管理されているオブジェクトのみを監視できます。 アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンでinvalidate()を呼び出します。

    コールバック ブロック内で監視対象オブジェクトへの強力な参照をキャプチャしても安全です。 コールバックはオブジェクト自体ではなく返されたトークンによって保持されるため、保持サイクルがありません。

    警告

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

    宣言

    Swift

    public func observe<T: RLMObjectBase>(on queue: DispatchQueue? = nil,
                                          _ block: @escaping (ObjectChange<T>) -> Void) -> NotificationToken

    パラメーター

    queue

    通知を受信するシリアル ディスパッチ キュー。 nilの場合、通知は現在のスレッドに配信されます。

    block

    オブジェクトに対する変更に関する情報を呼び出すブロック。

    戻り値

    更新を配信する限り保持する必要があるトークン。

比較

  • 2 つの Realm オブジェクトが同じかどうかを返します。

    オブジェクトは同じ Realm によって管理され、データベース内の同じ基礎オブジェクトを指している場合にのみ、同じと見なされます。

    注意

    等価比較はisEqual(_:)によって実装されています。 オブジェクトタイプがプライマリキーで定義されている場合、 isEqual(_:)はこのメソッドと同じように動作します。 オブジェクトタイプがプライマリキーで定義されていない場合、 isEqual(_:)はオブジェクト ID を比較するためにNSObjectの動作を使用します。 このメソッドは、オブジェクトタイプがプライマリキーを定義するかどうかにかかわらず、データベースの等価性について 2 つのオブジェクトを比較するために使用できます。

    宣言

    Swift

    public func isSameObject(as object: EmbeddedObject?) -> Bool

    パラメーター

    object

    レシーバーを比較するオブジェクト。

  • このオブジェクトが固定されているかどうかを示します。

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

    Object.freeze()

    宣言

    Swift

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

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

    警告

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

    警告

    このメソッドは、管理対象のオブジェクトでのみ呼び出せます。

    宣言

    Swift

    public func freeze() -> Self