Map
public final class Map<Key, Value> : RLMSwiftCollectionBase where Key : _MapKey, Value : RealmCollectionValue
extension Map: ObservableObject, RealmSubscribable
extension Map: Sequence
extension Map: RealmKeyedCollection
extension Map: Decodable where Key: Decodable, Value: Decodable
extension Map: Encodable where Key: Encodable, Value: Encodable
マップは、サポートされている Realm タイプを保存するために使用されるキー値のストレージ コンテナです。
マップは、保存するタイプにパラメータ化されるジェネリックタイプです。 これは、オブジェクト サブクラスまたは次のいずれかのタイプになります: ブール、Int、Int8、Int16、Int32、Int64、浮動小数点数、 double 、 string 、Data、Date、Decimal128、 ObjectId (およびこれらの任意バージョン)
注意
Object
を除く上記タイプの任意バージョンは、同期されていない Realm でのみサポートされます。
マップではキーとしてString
のみをサポートしています。 Realm では、辞書キー内で.
または$
文字の使用が禁止されています。
Swift のネイティブ コレクションとは異なり、 Map
は参照型であり、それを管理する Realm が読み取り専用として開かれている場合にのみ不変です。
Results<Value>
と同じ述語でマップをフィルタリングおよびソートすることができます。
-
マップを管理する Realm、またはマップが管理されていない場合は
nil
。宣言
Swift
public var realm: Realm? { get }
-
マップがアクセスできなくなっているかどうかを示します。
宣言
Swift
public var isInvalidated: Bool { get }
-
このマップ内のすべてのキーを返します。
宣言
Swift
public var keys: [Key] { get }
-
このマップ内のすべての値を返します。
宣言
Swift
public var values: [Value] { get }
-
タイプ
Value
の Realm モデル オブジェクトを保持するMap
を作成します。宣言
Swift
public override init()
-
このマップ内のキーと値のペアの数を返します。
宣言
Swift
@objc public var count: Int { get }
-
指定されたキーのマップに保存されている値をアップデートし、キーが存在しない場合は新しいキーと値のペアを追加します。
注意
マップに追加される値が非管理オブジェクトで、かつマップが管理されている場合、その非管理オブジェクトは Realm に追加されます。
警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。
宣言
Swift
public func updateValue(_ value: Value, forKey key: Key)
パラメーター
value
値のキーパス述語。
forKey
並べ替える方向。
-
結合閉じる を使用して重複キーの値を決定し、指定された辞書をこのマップにマージします。
このマップにすでに存在するキーが
dictionary
に含まれている場合、マップに現在ある値と辞書にある値を使用してcombine
が呼び出されます。 閉じるによって返された値は、そのキーのマップに保存されます。注意
マップに追加される値が非管理オブジェクトで、かつマップが管理されている場合、その非管理オブジェクトは Realm に追加されます。
警告
このメソッドは、書込みトランザクション中にマネージド マップでのみ呼び出されます。
宣言
Swift
public func merge<S>(_ sequence: S, uniquingKeysWith combine: (Value, Value) throws -> Value) rethrows where S: Sequence, S.Element == (key: Key, value: Value)
パラメーター
dictionary
このマップにマージする辞書。
combine
重複キーの現在の値と新しい値を取る 閉じる 。 閉じると、最終マップの目的の値が返されます。
-
指定されたマップをこのマップにマージし、重複するキーの値を決定するために結合されます。
このマップにすでに存在するキーが
other
に含まれている場合、マップに現在ある値と他のマップにある値を使用してcombine
が呼び出されます。 閉じるによって返された値は、そのキーのマップに保存されます。注意
マップに追加される値が非管理オブジェクトで、かつマップが管理されている場合、その非管理オブジェクトは Realm に追加されます。
警告
このメソッドは、書込みトランザクション中にマネージド マップでのみ呼び出されます。
宣言
Swift
public func merge(_ other: Map<Key, Value>, uniquingKeysWith combine: (Value, Value) throws -> Value) rethrows
パラメーター
other
このマップにマージするマップ。
combine
重複キーの現在の値と新しい値を取る 閉じる 。 閉じると、最終マップの目的の値が返されます。
-
指定されたキーとそれに関連付けられたオブジェクトを、キーがマップ内に存在する場合にのみ削除します。 キーが存在しない場合、マップは変更されません。
警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。宣言
Swift
public func removeObject(for key: Key)
-
マップからすべてのオブジェクトを削除します。 オブジェクトは、それらを管理する Realm から削除されません。
警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。宣言
Swift
public func removeAll()
-
指定されたキーの値を返します。または、サブスクリプトを割り当てに使用する場合は、キーの値を設定します。
注意
注: マップに追加される値が非管理オブジェクトで、かつマップが管理されている場合、その非管理オブジェクトは Realm に追加されます。
注意
注: キーに割り当てられている値が
nil
の場合、そのキーはマップから削除されます。警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。
宣言
Swift
public subscript(key: Key) -> Value? { get set }
パラメーター
key
キー。
-
マップ内に存在する場合は、指定されたキーの
AnyObject
のタイプを返します。宣言
Swift
@objc public func object(forKey key: AnyObject) -> AnyObject?
パラメーター
key
値が必要なプロパティへのキー。
-
マップ内に存在する場合は、指定されたキーの
Value
のタイプを返します。キー値のコーディングを使用する場合、キーは string である必要があることに注意してください。
宣言
Swift
@nonobjc public func value(forKey key: String) -> AnyObject?
パラメーター
key
値が必要なプロパティへのキー。
-
マップ内に存在する場合は、指定されたキーの
Value
のタイプを返します。宣言
Swift
@nonobjc public func value(forKeyPath keyPath: String) -> AnyObject?
パラメーター
keyPath
値が必要なプロパティへのキー。
-
指定されたキーと値のペアをマップに追加するか、指定されたキーがすでに存在する場合は更新します。
警告
このメソッドは、書込みトランザクション中にのみ呼び出すことができます。
宣言
Swift
public func setValue(_ value: Any?, forKey key: String)
パラメーター
value
オブジェクト値。
key
各オブジェクトに値を設定するプロパティの名前。
-
マップにキーと値のペアが指定された述語を満たすかどうかを示すブール値を返します。
宣言
Swift
public func contains(where predicate: @escaping (_ key: Key, _ value: Value) -> Bool) -> Bool
パラメーター
where
指定されたマップのいずれかのキーペアが一致を表すかどうかをテストする包含。
-
マップ内のオブジェクトを含む
Results
をソートされた状態で返します。オブジェクトは、指定されたキー パスの値に基づいてソートされます。 たとえば、
Student
のマップをage
プロパティに基づいて、小さいものから古い順に並べ替えるには、students.sorted(byKeyPath: "age", ascending: true)
を呼び出します。警告
辞書は、ブール値、
Date
、NSDate
、単一および倍精度浮動小数点、整数、および string 型のプロパティでのみソートできます。宣言
Swift
public func sorted(byKeyPath keyPath: String, ascending: Bool = true) -> Results<Value>
パラメーター
keyPath
ソートするキー パス。
ascending
並べ替える方向。
-
マップ内のオブジェクトを含む
Results
をソートされた状態で返します。警告
マップの は、ブール値、
Date
、NSDate
、単一および倍精度浮動小数点、整数、および string 型のプロパティでのみソートできます。詳細は、次を参照してください:
宣言
Swift
public func sorted<S: Sequence>(by sortDescriptors: S) -> Results<Value> where S.Iterator.Element == SortDescriptor
-
コレクション内のすべてのオブジェクト間で指定されたプロパティの最小(最小)値を返します。マップが空の場合は
nil
を返します。警告
MinMaxType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
public func min<T>(ofProperty property: String) -> T? where T : _HasPersistedType, T.PersistedType : MinMaxType
パラメーター
property
最小値が必要なプロパティの名前。
-
コレクション内のすべてのオブジェクト間で指定されたプロパティの最大値(最高値)を返します。マップが空の場合は
nil
を返します。警告
MinMaxType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
public func max<T>(ofProperty property: String) -> T? where T : _HasPersistedType, T.PersistedType : MinMaxType
パラメーター
property
最小値が必要なプロパティの名前。
-
コレクション内のオブジェクトの指定された プロパティの合計を返します。マップが空の場合は
nil
です。警告
AddableType
プロトコルに準拠した型のプロパティ名のみを使用できます。宣言
Swift
public func sum<T>(ofProperty property: String) -> T where T : _HasPersistedType, T.PersistedType : AddableType
パラメーター
property
合計を計算するための
AddableType
に準拠したプロパティの名前。 -
コレクション内のすべてのオブジェクトにわたる指定されたプロパティの平均値を返します。マップが空の場合は
nil
を返します。警告
AddableType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
public func average<T>(ofProperty property: String) -> T? where T : _HasPersistedType, T.PersistedType : AddableType
パラメーター
property
値を合計するプロパティの名前。
-
マップが変更されるたびに呼び出されるブロックを登録します。
ブロックは最初のマップとは非同期に呼び出され、マップ内のキーまたは値のいずれかを変更する書き込みトランザクションごとに再度呼び出されます。
ブロックに渡される
change
パラメータは、各書き込みトランザクション中に追加、削除、または変更されたキーと値のペアを、マップ内のキーの形式で報告します。キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。 これには、初期コレクションの通知を含めることができます。
たとえば、次のコードは通知ブロックを追加した後すぐに書込みトランザクションを実行するため、最初の通知が最初に配信される可能性はありません。 その結果、最初の通知には、書込みトランザクション後の Realm の状態が反映されます。
let myStringMap = myObject.stringMap print("myStringMap.count: \(myStringMap?.count)") // => 0 let token = myStringMap.observe { changes in switch changes { case .initial(let myStringMap): // Will print "myStringMap.count: 1" print("myStringMap.count: \(myStringMap.count)") print("Dog Name: \(myStringMap["nameOfDog"])") // => "Rex" break case .update: // Will not be hit in this example break case .error: break } } try! realm.write { myStringMap["nameOfDog"] = "Rex" }
キー パスが指定されていない場合、ブロックは、すべてのオブジェクト プロパティとネストされたリンクされたオブジェクトのプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } // ... let dogs = myObject.mapOfDogs let token = dogs.observe(keyPaths: ["name"]) { changes in switch changes { case .initial(let dogs): // ... case .update: // This case is hit: // - after the token is initialized // - when the name property of an object in the // collection is modified // - when an element is inserted or removed // from the collection. // This block is not triggered: // - when a value other than name is modified on // one of the elements. case .error: // ... } }
- 確認されたキー パスが
["toys.brand"]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 上記の例で
["toys"]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
注意
個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
注意
keyPaths パラメーターはコレクション型のオブジェクト プロパティを参照し、マップ内の特定のキーと値のペアは参照しません。
宣言
Swift
public func observe(keyPaths: [String]? = nil, on queue: DispatchQueue? = nil, _ block: @escaping (RealmMapChange<Map>) -> Void) -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトのプロパティ変更に対して通知が配信されます。 有効な プロパティに対応していないstringキー パスでは例外がスローされます。 リンクされたプロパティの詳細については、上記の説明を参照してください。queue
通知を受信するシリアル ディスパッチ キュー。
nil
の場合、通知は現在のスレッドに配信されます。block
変更が発生するたびに呼び出されるブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 確認されたキー パスが
-
マップが変更されるたびに呼び出されるブロックを登録します。
ブロックは最初のマップを持つアクターで非同期に呼び出され、マップに存在するキーまたは オブジェクトの値のいずれかを変更する書き込みトランザクションごとに再度呼び出されます。
ブロックに渡される
change
パラメータは、各書き込みトランザクション中に追加、削除、または変更されたキーと値のペアを、マップ内のキーの形式で報告します。通知は、指定されたアクターの実行プログラム上の、そのアクターに分離された関数に配信されます。 アクターがブロッキング作業を実行している場合、複数の通知が 1 つの通知に統合されることがあります。 これには初期コレクションの通知を含めることができ、変更は最初の通知が配信された後に発生した書き込みについてのみ報告されます。
キー パスが指定されていない場合、ブロックは、すべてのオブジェクト プロパティとネストされたリンクされたオブジェクトのプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } // ... let dogs = myObject.mapOfDogs let token = dogs.observe(keyPaths: ["name"], on: actor) { actor, changes in switch changes { case .initial(let dogs): // ... case .update: // This case is hit: // - after the token is initialized // - when the name property of an object in the collection is modified // - when an element is inserted or removed from the collection. // This block is not triggered: // - when a value other than name is modified on one of the elements. case .error: // No longer possible and left for backwards compatibility } }
- 確認されたキー パスが
["toys.brand"]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 - 上記の例で
["toys"]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
注意
keyPaths パラメーターはコレクション型のオブジェクト プロパティを参照し、マップ内の特定のキーと値のペアは参照しません。
宣言
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) @_unsafeInheritExecutor public func observe<A: Actor>( keyPaths: [String]? = nil, on actor: A, _ block: @Sendable @escaping (isolated A, RealmMapChange<Map>) -> Void ) async -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトのプロパティ変更に対して通知が配信されます。 有効な プロパティに対応していないstringキー パスでは例外がスローされます。 リンクされたプロパティの詳細については、上記の説明を参照してください。actor
通知を配信するアクター。 The block is passed this actor as an isolated parameter, allowing you to access the actor synchronously from within the callback.
block
変更が発生するたびに呼び出されるブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 確認されたキー パスが
-
マップが変更されるたびに呼び出されるブロックを登録します。
ブロックは最初のマップを持つアクターで非同期に呼び出され、マップに存在するキーまたは オブジェクトの値のいずれかを変更する書き込みトランザクションごとに再度呼び出されます。
ブロックに渡される
change
パラメータは、各書き込みトランザクション中に追加、削除、または変更されたキーと値のペアを、マップ内のキーの形式で報告します。通知は、指定されたアクターの実行プログラム上の、そのアクターに分離された関数に配信されます。 アクターがブロッキング作業を実行している場合、複数の通知が 1 つの通知に統合されることがあります。 これには初期コレクションの通知を含めることができ、変更は最初の通知が配信された後に発生した書き込みについてのみ報告されます。
ブロックは、指定されたキー パスでのみ発生する変更に対して呼び出されます。 たとえば、次の場合:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } // ... let dogs = myObject.mapOfDogs let token = dogs.observe(keyPaths: [\.name], on: actor) { actor, changes in switch changes { case .initial(let dogs): // ... case .update: // This case is hit: // - after the token is initialized // - when the name property of an object in the collection is modified // - when an element is inserted or removed from the collection. // This block is not triggered: // - when a value other than name is modified on one of the elements. case .error: // No longer possible and left for backwards compatibility } }
- 確認されたキー パスが
[\.toys.brand]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 - 上記の例で
[\.toys]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
注意
keyPaths パラメーターはコレクション型のオブジェクト プロパティを参照し、マップ内の特定のキーと値のペアは参照しません。
宣言
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) @_unsafeInheritExecutor public func observe<A: Actor>( keyPaths: [PartialKeyPath<Value.Wrapped>], on actor: A, _ block: @Sendable @escaping (isolated A, RealmMapChange<Map>) -> Void ) async -> NotificationToken where Value: OptionalProtocol, Value.Wrapped: ObjectBase
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトのプロパティ変更に対して通知が配信されます。 有効な プロパティに対応していないstringキー パスでは例外がスローされます。 リンクされたプロパティの詳細については、上記の説明を参照してください。actor
通知を配信するアクター。 The block is passed this actor as an isolated parameter, allowing you to access the actor synchronously from within the callback.
block
変更が発生するたびに呼び出されるブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 確認されたキー パスが
-
Map
が固定されているかどうかを示します。凍結された
Map
は不変であり、どのスレッドからでもアクセスできます。 凍結されたMap
は、管理対象のライブMap
で-freeze
を呼び出すことで作成されます。 管理されていないMap
は固定されません。宣言
Swift
public var isFrozen: Bool { get }
-
Map
の固定(不変)スナップショットを返します。固定されたコピーは、この
Map
に現在含まれているデータと同じデータを含む不変のMap
であり、含まれている Realm に書込み (write) が行われた場合は更新されません。 ライブMap
とは異なり、固定されたMap
にはどのスレッドからでもアクセスできます。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。警告
このメソッドは、管理対象のMap
でのみ呼び出せます。警告
Realm で書き込みトランザクションを実行中に固定されたMap
を長時間保持すると、Realm ファイルのサイズが大きくなる可能性があります。 詳しくは、RLMRealmConfiguration.maximumNumberOfActiveVersions
を参照してください。宣言
Swift
public func freeze() -> Map
-
この固定された
Map
のライブ バージョンを返します。このメソッドは、同じ固定された
Map
のライブ コピーへの参照を解決します。 ライブMap
で呼び出されると、 は自分自身を返します。宣言
Swift
public func thaw() -> Map?
-
マップに含まれるオブジェクトの人間が判読可能な説明を返します。
宣言
Swift
public override var description: String { get }
-
コレクションが変更されるたびに Vid を発行する出版社。
名前に関係なく、コレクションが変更された後にこれが実際に発行します。
宣言
Swift
public var objectWillChange: RealmPublishers.WillChange<Map> { get }
-
Map
で連続する要素を生成するRLMMapIterator
を返します。宣言
Swift
public func makeIterator() -> RLMMapIterator<SingleMapEntry<Key, Value>>
-
Map のアダプター。これにより、
詳細はこちらSingleMapEntry
のシーケンスではなく(key: Key, value: Value)
のシーケンスになります。宣言
Swift
public struct KeyValueSequence : Sequence
-
このマップを次のシーケンスとして返します:
(key: Key, value: Value)
宣言
Swift
public func asKeyValueSequence() -> KeyValueSequence
-
宣言
Swift
public convenience init(from decoder: Decoder) throws
-
宣言
Swift
public func encode(to encoder: Encoder) throws