RealmCollection
public protocol RealmCollection : RealmCollectionBase, Equatable where Self.Iterator == RLMIterator<Self.Element>
検索、フィルタリング、並べ替え、操作可能なObject
の同義語コレクション。
-
コレクションを管理する Realm、または管理されていないコレクションの場合は
nil
。宣言
Swift
var realm: Realm? { get }
-
コレクションがアクセスできなくなっているかどうかを示します。
コレクションを管理する
Realm
でinvalidate()
が呼び出された場合、コレクションにアクセスできなくなります。宣言
Swift
var isInvalidated: Bool { get }
-
コレクション内のオブジェクトの数。
宣言
Swift
var count: Int { get }
-
コレクションに含まれるオブジェクトの、人間が判読可能な説明。
宣言
Swift
var description: String { get }
-
コレクション内の最初のオブジェクトを返します。コレクションが空の場合は
nil
を返します。宣言
Swift
var first: Element? { get }
-
コレクション内の最後のオブジェクトを返します。コレクションが空の場合は
nil
を返します。宣言
Swift
var last: Element? { get }
-
コレクション内のオブジェクトのインデックスを返します。オブジェクトが存在しない場合は
nil
を返します。宣言
Swift
func index(of object: Element) -> Int?
パラメーター
object
オブジェクト。
-
index(matching:
デフォルトの実装) 述語に一致する最初のオブジェクトのインデックスを返します。一致するオブジェクトがない場合は
nil
を返します。これは、順序付きコレクションにのみ適用され、コレクションが順序付けられていない場合は中止されます。
デフォルトの実装
クエリに一致する最初のオブジェクトのインデックスを返します。一致するオブジェクトがない場合は
nil
を返します。これは、順序付きコレクションにのみ適用され、コレクションが順序付けられていない場合は中止されます。
注意
これは、
@Persistable
プロパティ宣言を使用するクラスでのみ使用する必要があります。使用法:
obj.index(matching: { $0.fooCol < 456 })
注意
利用可能なクエリ操作の詳細については、
Query
を参照してください。宣言
Swift
func index(matching predicate: NSPredicate) -> Int?
パラメーター
predicate
オブジェクトをフィルタリングするために使用する述語。
-
index(matching:
デフォルトの実装_: ) 述語に一致する最初のオブジェクトのインデックスを返します。一致するオブジェクトがない場合は
nil
を返します。これは、順序付きコレクションにのみ適用され、コレクションが順序付けられていない場合は中止されます。
デフォルトの実装
指定された述語に一致する最初のオブジェクトのインデックスを返します。一致するオブジェクトがない場合は
nil
を返します。宣言
Swift
func index(matching predicateFormat: String, _ args: Any...) -> Int?
パラメーター
predicateFormat
述語形式の string 。オプションで、その後に変数の数の引数が続きます。
-
指定されたインデックスセットによって指定されたインデックスにあるコレクション内のオブジェクトを含む配列を返します。
警告
IndexSet で提供されたインデックスが範囲外の場合、 がスローされます。
宣言
Swift
func objects(at indexes: IndexSet) -> [Element]
パラメーター
indexes
オブジェクトを選択するための コレクション内のインデックス。
-
filter(_:
デフォルトの実装_: )
-
コレクション内のオブジェクトを含む
Results
をソートされた状態で返します。警告
コレクションは、ブール値、
Date
、NSDate
、単一および倍精度浮動小数点、整数、およびstring型のプロパティでのみソートできます。詳細は、次を参照してください:
宣言
Swift
func sorted<S>(by sortDescriptors: S) -> Results<Element> where S : Sequence, S.Element == SortDescriptor
パラメーター
sortDescriptors
並べ替える
SortDescriptor
のシーケンス。
-
コレクション内のすべてのオブジェクト間で指定されたプロパティの最小(最小)値を返します。コレクションが空の場合は
nil
を返します。警告
MinMaxType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
func min<T>(ofProperty property: String) -> T? where T : _HasPersistedType, T.PersistedType : MinMaxType
パラメーター
property
最小値が必要なプロパティの名前。
-
コレクション内のすべてのオブジェクト間で指定されたプロパティの最大値(最高値)を返します。コレクションが空の場合は
nil
を返します。警告
MinMaxType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
func max<T>(ofProperty property: String) -> T? where T : _HasPersistedType, T.PersistedType : MinMaxType
パラメーター
property
最小値が必要なプロパティの名前。
-
コレクション内のオブジェクトの指定された プロパティの合計を返します。コレクションが空の場合は
nil
です。警告
AddableType
プロトコルに準拠した型のプロパティ名のみを使用できます。宣言
Swift
func sum<T>(ofProperty property: String) -> T where T : _HasPersistedType, T.PersistedType : AddableType
パラメーター
property
合計を計算するための
AddableType
に準拠したプロパティの名前。 -
コレクション内のすべてのオブジェクトにわたる指定されたプロパティの平均値を返します。コレクションが空の場合は
nil
を返します。警告
AddableType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
func average<T>(ofProperty property: String) -> T? where T : _HasPersistedType, T.PersistedType : AddableType
パラメーター
property
値を合計するプロパティの名前。
-
コレクションの各オブジェクトで
key
を使用してvalueForKey(_:)
を呼び出した結果を含むArray
を返します。宣言
Swift
func value(forKey key: String) -> Any?
パラメーター
key
値が必要なプロパティの名前。
-
コレクションの各オブジェクトで
keyPath
を使用してvalueForKeyPath(_:)
を呼び出した結果を含むArray
を返します。宣言
Swift
func value(forKeyPath keyPath: String) -> Any?
パラメーター
keyPath
値が必要なプロパティへのキー パス。
-
指定された
value
とkey
を使用して、コレクション内の各オブジェクトでsetValue(_:forKey:)
を呼び出します。警告
このメソッドは、書込みトランザクション中にのみ呼び出されます。
宣言
Swift
func setValue(_ value: Any?, forKey key: String)
パラメーター
value
オブジェクト値。
key
各オブジェクトに値を設定するプロパティの名前。
-
observe(keyPaths:
デフォルトの実装on: _: ) コレクションが変更されるたびに呼び出されるブロックを登録します。
ブロックは初期結果とは非同期に呼び出され、コレクション内のいずれかのオブジェクトまたはコレクション内のどのオブジェクトのいずれかを変更する書込みトランザクションごとに再度呼び出されます。
ブロックに渡される
change
パラメータは、各書込みトランザクション中に追加、削除、または変更されたオブジェクトをコレクション内のインデックスの形式で報告します。 提供される変更情報の詳細と、その変更情報を使用してUITableView
をアップデートする方法の例については、RealmCollectionChange
のドキュメントを参照してください。ブロックが呼び出される時点で、コレクションは完全に評価され、最新の状態になります。また、同じスレッドで書込みトランザクションを実行したり、
realm.refresh()
を明示的に呼び出したりしない限り、アクセスに関するブロッキングは実行されません動作する。キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。 これには、初期コレクションの通知を含めることができます。
たとえば、次のコードは通知ブロックを追加した後すぐに書込みトランザクションを実行するため、最初の通知が最初に配信される可能性はありません。 その結果、最初の通知には、書込みトランザクション後の Realm の状態が反映されます。
let dogs = realm.objects(Dog.self) print("dogs.count: \(dogs?.count)") // => 0 let token = dogs.observe { changes in switch changes { case .initial(let dogs): // Will print "dogs.count: 1" print("dogs.count: \(dogs.count)") break case .update: // Will not be hit in this example break case .error: break } } try! realm.write { let dog = Dog() dog.name = "Rex" person.dogs.append(dog) } // end of run loop execution context
キー パスが指定されていない場合、ブロックは、すべてのオブジェクト プロパティとネストされたリンクされたオブジェクトのプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } // ... let dogs = realm.objects(Dog.self) 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: // ... } } // end of run loop execution context
- 確認されたキー パスが
["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 を含む が読み取り専用の場合に呼び出すことができません。
デフォルトの実装
コレクションが変更されるたびに呼び出されるブロックを登録します。
ブロックは初期結果とは非同期に呼び出され、コレクション内のいずれかのオブジェクトまたはコレクション内のどのオブジェクトのいずれかを変更する書込みトランザクションごとに再度呼び出されます。
ブロックに渡される
change
パラメータは、各書込みトランザクション中に追加、削除、または変更されたオブジェクトをコレクション内のインデックスの形式で報告します。 提供される変更情報の詳細と、その変更情報を使用してUITableView
をアップデートする方法の例については、RealmCollectionChange
のドキュメントを参照してください。ブロックが呼び出される時点で、コレクションは完全に評価され、最新の状態になります。また、同じスレッドで書込みトランザクションを実行したり、
realm.refresh()
を明示的に呼び出したりしない限り、アクセスに関するブロッキングは実行されません動作する。キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。 これには、初期コレクションの通知を含めることができます。
たとえば、次のコードは通知ブロックを追加した後すぐに書込みトランザクションを実行するため、最初の通知が最初に配信される可能性はありません。 その結果、最初の通知には、書込みトランザクション後の Realm の状態が反映されます。
let dogs = realm.objects(Dog.self) print("dogs.count: \(dogs?.count)") // => 0 let token = dogs.observe { changes in switch changes { case .initial(let dogs): // Will print "dogs.count: 1" print("dogs.count: \(dogs.count)") break case .update: // Will not be hit in this example break case .error: break } } try! realm.write { let dog = Dog() dog.name = "Rex" person.dogs.append(dog) } // end of run loop execution context
キー パスが指定されていない場合、ブロックは、すべてのオブジェクト プロパティとネストされたリンクされたオブジェクトのプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } // ... let dogs = realm.objects(Dog.self) let token = dogs.observe(keyPaths: [\Dog.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: // ... } } // end of run loop execution context
- 確認されたキー パスが
[\Dog.toys.brand]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 上記の例で
[\Dog.toys]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
注意
個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
宣言
Swift
func observe(keyPaths: [String]?, on queue: DispatchQueue?, _ block: @escaping (RealmCollectionChange<Self>) -> Void) -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
の場合、オブジェクトのプロパティ変更に対して通知が配信されます。 有効な プロパティに対応していないstringキー パスでは例外がスローされます。 リンクされたプロパティの詳細については、上記の説明を参照してください。queue
通知を受信するシリアル ディスパッチ キュー。
nil
の場合、通知は現在のスレッドに配信されます。block
変更が発生するたびに呼び出されるブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 確認されたキー パスが
-
observe(keyPaths:
デフォルトの実装、非同期on: _: ) コレクションが変更されるたびに呼び出されるブロックを登録します。
ブロックはコレクションの初期バージョンと非同期に呼び出され、コレクション内のいずれかのオブジェクトまたはコレクション内のどのオブジェクトのいずれかを変更する各書込みトランザクションの後に再度呼び出されます。
ブロックに渡される
actor
パラメータは、この関数に渡すアクターです。 このパラメーターは、アクターへのコールバックを分離するために必要です。ブロックに渡される
change
パラメータは、前回の通知後に追加、削除、または変更されたオブジェクトをコレクション内のインデックスの形式で報告します。 変更列挙のcollection
フィールドは要求されたアクターに分離され、そのアクター内でのみ安全に使用できます。 提供される変更情報の詳細と、その変更情報を使用してUITableView
を更新する方法の例については、RealmCollectionChange
のドキュメントを参照してください。最初の通知が配信されると、コレクションは完全に評価されて最新になり、このコレクションにアクセスしてもブロッキング作業は実行されません。 この保証は、通知が配信されるのと同じアクターで書込みトランザクションを実行しない場合にのみ有効です。 その場合、次の通知が配信される前にコレクションにアクセスするには、クエリを再実行する必要がある可能性があります。
通知は指定されたアクターの実行プログラムに配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。 これには、初期コレクションの通知を含めることができます。最初の通知が配信される前に発生する書き込みでは、変更通知が生成されない可能性があります。
コレクション内のオブジェクトを追加、削除、または割り当てると常に通知が生成されます。 デフォルトでは、コレクションがリンクするオブジェクト(およびそれらのオブジェクトがリンクするオブジェクト(該当する場合)を変更すると、コレクション内のそのインデックスも変更されていることが報告されます。 キーパスの空でない配列が指定されている場合、それらのキーパスに対する変更のみによってオブジェクトは変更済みとしてマークされます。 例:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } let dogs = realm.objects(Dog.self) let token = await dogs.observe(keyPaths: ["name"], on: myActor) { actor, changes in switch changes { case .initial(let dogs): // Query has finished running and dogs can not be used without blocking 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: // Can no longer happen but is left for backwards compatiblity } }
- 確認されたキー パスが
["toys.brand"]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 - 上記の例で
["toys"]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
デフォルトの実装
コレクションが変更されるたびに呼び出されるブロックを登録します。
ブロックはコレクションの初期バージョンと非同期に呼び出され、コレクション内のいずれかのオブジェクトまたはコレクション内のどのオブジェクトのいずれかを変更する各書込みトランザクションの後に再度呼び出されます。
ブロックに渡される
actor
パラメータは、この関数に渡すアクターです。 このパラメーターは、アクターへのコールバックを分離するために必要です。ブロックに渡される
change
パラメータは、前回の通知後に追加、削除、または変更されたオブジェクトをコレクション内のインデックスの形式で報告します。 変更列挙のcollection
フィールドは要求されたアクターに分離され、そのアクター内でのみ安全に使用できます。 提供される変更情報の詳細と、その変更情報を使用してUITableView
を更新する方法の例については、RealmCollectionChange
のドキュメントを参照してください。最初の通知が配信されると、コレクションは完全に評価されて最新になり、このコレクションにアクセスしてもブロッキング作業は実行されません。 この保証は、通知が配信されるのと同じアクターで書込みトランザクションを実行しない場合にのみ有効です。 その場合、次の通知が配信される前にコレクションにアクセスするには、クエリを再実行する必要がある可能性があります。
通知は指定されたアクターの実行プログラムに配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。 これには、初期コレクションの通知を含めることができます。最初の通知が配信される前に発生する書き込みでは、変更通知が生成されない可能性があります。
コレクション内のオブジェクトを追加、削除、または割り当てると常に通知が生成されます。 デフォルトでは、コレクションがリンクするオブジェクト(およびそれらのオブジェクトがリンクするオブジェクト(該当する場合)を変更すると、コレクション内のそのインデックスも変更されていることが報告されます。 キーパスの空でない配列が指定されている場合、それらのキーパスに対する変更のみによってオブジェクトは変更済みとしてマークされます。 例:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } let dogs = realm.objects(Dog.self) let token = await dogs.observe(keyPaths: ["name"], on: myActor) { actor, changes in switch changes { case .initial(let dogs): // Query has finished running and dogs can not be used without blocking 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: // Can no longer happen but is left for backwards compatiblity } }
- 確認されたキー パスが
["toys.brand"]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 - 上記の例で
["toys"]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
宣言
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) @_unsafeInheritExecutor func observe<A: Actor>(keyPaths: [String]?, on actor: A, _ block: @Sendable @escaping (isolated A, RealmCollectionChange<Self>) -> Void) async -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。
nil
または空の場合、オブジェクトのプロパティ変更に対して通知が配信されます。 有効な プロパティに対応していないstringキー パスでは例外がスローされます。 リンクされたプロパティの詳細については、上記の説明を参照してください。actor
通知を分離するアクター。
block
変更が発生するたびに呼び出されるブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 確認されたキー パスが
-
このコレクションが固定されている場合は true を返します
宣言
Swift
var isFrozen: Bool { get }
-
このコレクションの固定(不変)スナップショットを返します。
固定されたコピーは、このコレクションに現在含まれているデータと同じデータを含む不変のコレクションですが、含まれている Realm への書込み (write) が行われても更新されません。 ライブコレクションとは異なり、固定コレクションには任意のスレッドからアクセスできます。
警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。警告
Realm で書込みトランザクションを実行中に固定されたコレクションを長時間保持すると、Realm ファイルのサイズが大きくなる可能性があります。 詳しくは、Realm.Configuration.maximumNumberOfActiveVersions
を参照してください。宣言
Swift
func freeze() -> Self
-
この固定されたコレクションのライブ(可変)バージョンを返します。
このメソッドは、同じ固定コレクションのライブ コピーへの参照を解決します。 ライブ コレクションで呼び出されると、 は自分自身を返します。
宣言
Swift
func thaw() -> Self?
-
このコレクションを指定されたソート記述子の配列からソートし、ユーザー定義のコールバックを介してセクション化を実行し、その結果を
SectionedResults
のインスタンスとして返します。注意
プライマリソート記述子は、セクションキーの決定を担当する必要があります。
宣言
Swift
func sectioned<Key: _Persistable>(sortDescriptors: [SortDescriptor], _ keyBlock: @escaping ((Element) -> Key)) -> SectionedResults<Key, Element>
パラメーター
sortDescriptors
並べ替え対象の
SortDescriptor
の配列。keyBlock
結果コレクション内の各要素に対して呼び出されるコールバック。 このコールバックは、 コレクション内の要素のセクション キーを返すものです。
戻り値
SectionedResults
のインスタンス。
-
startIndex
拡張メソッド空でないコレクション内の最初の要素の位置。 空のコレクション内の endIndex と同じ。
宣言
Swift
var startIndex: Int { get }
-
endIndex
拡張メソッドコレクションの「終了を過ぎた」位置。 endIndex はサブスクリプトへの有効な引数ではなく、成功します()の 0 個以上のアプリケーションによって startIndex から常にアクセス可能です。
宣言
Swift
var endIndex: Int { get }
-
index(after:
拡張メソッド) 指定されたインデックスの直後の位置を返します。
宣言
Swift
func index(after i: Int) -> Int
パラメーター
i
コレクションの有効なインデックス。
i
はendIndex
より小さくなければなりません。 -
index(before:
拡張メソッド) 指定されたインデックスの直前の位置を返します。
宣言
Swift
func index(before i: Int) -> Int
パラメーター
i
コレクションの有効なインデックス。
i
はstartIndex
より大きくなければなりません。
-
sectioned(by:
拡張メソッドascending: ) このコレクションを昇順または降順でソートし、ユーザー定義のコールバック関数を介してセクションを実行します。
宣言
Swift
func sectioned<Key: _Persistable>(by block: @escaping ((Element) -> Key), ascending: Bool = true) -> SectionedResults<Key, Element>
パラメーター
block
コレクション内の各要素に対して呼び出されるコールバック。 このコールバックは、 コレクション内の要素のセクション キーを返すものです。
ascending
並べ替える方向。
戻り値
SectionedResults
のインスタンス。
-
sectioned(by:
拡張メソッドascending: ) このコレクションを指定されたプロパティ キー パスからソートしてセクションを作成し、その結果を
SectionedResults
のインスタンスとして返します。 keyPath から検索されたすべての一意の値に対してセクション キーが生成されます。宣言
Swift
public func sectioned<Key: _Persistable, O: ObjectBase>(by keyPath: KeyPath<Element, Key>, ascending: Bool = true) -> SectionedResults<Key, Element> where Element: Projection<O>
パラメーター
keyPath
ソートするプロパティ キー パス。
ascending
並べ替える方向。
戻り値
SectionedResults
のインスタンス。 -
このコレクションを指定されたプロパティ キー パスからソートしてセクションを作成し、その結果を
SectionedResults
のインスタンスとして返します。 keyPath から検索されたすべての一意の値に対してセクション キーが生成されます。注意
プライマリソート記述子は、セクションキーの決定を担当する必要があります。
宣言
Swift
public func sectioned<Key: _Persistable, O: ObjectBase>(by keyPath: KeyPath<Element, Key>, sortDescriptors: [SortDescriptor]) -> SectionedResults<Key, Element> where Element: Projection<O>
パラメーター
keyPath
ソートするプロパティ キー パス。
sortDescriptors
並べ替え対象の
SortDescriptor
の配列。戻り値
SectionedResults
のインスタンス。 -
このコレクションを指定されたソート記述子の配列からソートし、ユーザー定義のコールバックからセクション作成を実行し、その結果を
SectionedResults
のインスタンスとして返します。注意
プライマリソート記述子は、セクションキーの決定を担当する必要があります。
宣言
Swift
public func sectioned<Key: _Persistable, O: ObjectBase>(by block: @escaping ((Element) -> Key), sortDescriptors: [SortDescriptor]) -> SectionedResults<Key, Element> where Element: Projection<O>
パラメーター
block
結果コレクション内の各要素に対して呼び出されるコールバック。 このコールバックは、 コレクション内の要素のセクション キーを返すものです。
sortDescriptors
並べ替え対象の
SortDescriptor
の配列。戻り値
SectionedResults
のインスタンス。
-
objectWillChange
拡張メソッドコレクションが変更されるたびに Vid を発行する出版社。
名前に関係なく、コレクションが変更された後にこれが実際に発行します。
宣言
Swift
public var objectWillChange: RealmPublishers.WillChange<Self> { get }
-
collectionPublisher
拡張メソッドコレクションが変更されるたびにコレクションを発行する出版社。
宣言
Swift
public var collectionPublisher: RealmPublishers.Value<Self> { get }
-
指定されたプロパティ keyPaths でコレクションが変更されるたびにコレクションを発行する出版社。
宣言
Swift
public func collectionPublisher(keyPaths: [String]?) -> RealmPublishers.Value<Self>
-
changesetPublisher
拡張メソッドコレクションが変更されるたびにコレクションの変更セットを発行する出版社。
宣言
Swift
public var changesetPublisher: RealmPublishers.CollectionChangeset<Self> { get }
-
指定されたプロパティ keyPaths でコレクションが変更されるたびにコレクションの変更セットを発行する出版社。
宣言
Swift
public func changesetPublisher(keyPaths: [String]?) -> RealmPublishers.CollectionChangeset<Self>
-
encode(to:
拡張メソッド) このコレクションの内容を指定されたエンコードにエンコードします。
宣言
Swift
public func encode(to encoder: Encoder) throws
-
min(of:
拡張メソッド) コレクション内のすべてのオブジェクト間で指定されたプロパティの最小(最小)値を返します。コレクションが空の場合は
nil
を返します。警告
MinMaxType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
func min<T>(of keyPath: KeyPath<Element, T>) -> T? where T : _HasPersistedType, T.PersistedType : MinMaxType
パラメーター
keyPath
最小値が必要なプロパティの keyPath 。
-
max(of:
拡張メソッド) コレクション内のすべてのオブジェクト間で指定されたプロパティの最大値(最高値)を返します。コレクションが空の場合は
nil
を返します。警告
MinMaxType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
func max<T>(of keyPath: KeyPath<Element, T>) -> T? where T : _HasPersistedType, T.PersistedType : MinMaxType
パラメーター
keyPath
最小値が必要なプロパティの keyPath 。
-
sum(of:
拡張メソッド) コレクション内のオブジェクトの指定された プロパティの合計を返します。コレクションが空の場合は
nil
です。警告
AddableType
プロトコルに準拠した型のプロパティ名のみを使用できます。宣言
Swift
func sum<T>(of keyPath: KeyPath<Element, T>) -> T where T : _HasPersistedType, T.PersistedType : AddableType
パラメーター
keyPath
合計を計算するための
AddableType
に準拠したプロパティの keyPath 。 -
average(of:
拡張メソッド) コレクション内のすべてのオブジェクトにわたる指定されたプロパティの平均値を返します。コレクションが空の場合は
nil
を返します。警告
AddableType
プロトコルに準拠するタイプのプロパティのみを指定できます。宣言
Swift
func average<T>(of keyPath: KeyPath<Element, T>) -> T? where T : _HasPersistedType, T.PersistedType : AddableType
パラメーター
keyPath
値を合計する必要があるプロパティの keyPath 。
-
sectioned(by:
拡張メソッドascending: ) このコレクションを指定されたプロパティ キー パスからソートしてセクションを作成し、その結果を
SectionedResults
のインスタンスとして返します。 keyPath から検索されたすべての一意の値に対してセクション キーが生成されます。宣言
Swift
func sectioned<Key: _Persistable>(by keyPath: KeyPath<Element, Key>, ascending: Bool = true) -> SectionedResults<Key, Element> where Element: ObjectBase
パラメーター
keyPath
および セクションのプロパティ キー パス。
ascending
並べ替える方向。
戻り値
SectionedResults
のインスタンス。 -
このコレクションを指定されたプロパティ キー パスからソートしてセクションを作成し、その結果を
SectionedResults
のインスタンスとして返します。 keyPath から検索されたすべての一意の値に対してセクション キーが生成されます。注意
プライマリソート記述子は、セクションキーの決定を担当する必要があります。
宣言
Swift
func sectioned<Key: _Persistable>(by keyPath: KeyPath<Element, Key>, sortDescriptors: [SortDescriptor]) -> SectionedResults<Key, Element> where Element: ObjectBase
パラメーター
keyPath
および セクションのプロパティ キー パス。
sortDescriptors
並べ替え対象の
SortDescriptor
の配列。戻り値
SectionedResults
のインスタンス。 -
このコレクションを
SortDescriptor
の指定された配列からソートし、ユーザー定義のコールバック関数を介してセクションを実行します。注意
プライマリソート記述子は、セクションキーの決定を担当する必要があります。
宣言
Swift
func sectioned<Key: _Persistable>(by block: @escaping ((Element) -> Key), sortDescriptors: [SortDescriptor]) -> SectionedResults<Key, Element> where Element: ObjectBase
パラメーター
block
コレクション内の各要素に対して呼び出されるコールバック。 このコールバックは、 コレクション内の要素のセクション キーを返すものです。
sortDescriptors
並べ替え対象の
SortDescriptor
の配列。戻り値
SectionedResults
のインスタンス。
-
sum()
拡張メソッドコレクション内の 値の合計を返します。コレクションが空の場合は
nil
を返します。宣言
Swift
func sum() -> Element
-
average()
拡張メソッドコレクション内のすべての値の平均を返します。
宣言
Swift
func average<T>() -> T? where T : _HasPersistedType, T.PersistedType : AddableType
-
sorted(byKeyPath:
拡張メソッドascending: ) コレクション内のオブジェクトを含む
Results
をソートされた状態で返します。オブジェクトは、指定されたキー パスの値に基づいてソートされます。 たとえば、
Student
のコレクションをage
プロパティに基づいて、小さいものから古い順に並べ替えるには、students.sorted(byKeyPath: "age", ascending: true)
を呼び出します。警告
コレクションは、ブール値、
Date
、NSDate
、単一および倍精度浮動小数点、整数、およびstring型のプロパティでのみソートできます。宣言
Swift
func sorted(byKeyPath keyPath: String, ascending: Bool = true) -> Results<Element>
パラメーター
keyPath
ソートするキー パス。
ascending
並べ替える方向。
-
sorted(by:
拡張メソッドascending: ) コレクション内のオブジェクトを含む
Results
をソートされた状態で返します。オブジェクトは、指定されたキー パスの値に基づいてソートされます。 たとえば、
Student
のコレクションをage
プロパティに基づいて、小さいものから古い順に並べ替えるには、students.sorted(byKeyPath: "age", ascending: true)
を呼び出します。警告
コレクションは、ブール値、
Date
、NSDate
、単一および倍精度浮動小数点、整数、およびstring型のプロパティでのみソートできます。宣言
Swift
func sorted<T>(by keyPath: KeyPath<Element, T>, ascending: Bool = true) -> Results<Element> where T : _HasPersistedType, Self.Element : RLMObjectBase, T.PersistedType : SortableType
パラメーター
keyPath
ソートするキー パス。
ascending
並べ替える方向。
-
distinct(by:
デフォルトの実装) デフォルトの実装
指定されたキー パスに基づいて個別のオブジェクトを含む
Results
を返します宣言
Swift
func distinct<S: Sequence>(by keyPaths: S) -> Results<Element> where S.Iterator.Element == PartialKeyPath<Element>, Element: ObjectBase
パラメーター
keyPaths
使用されるキー パスは異なる結果を生成します
-
sorted(ascending:
拡張メソッド) -
distinct()
拡張メソッド
-
observe(keyPaths:
デフォルトの実装on: _: ) デフォルトの実装
コレクションが変更されるたびに呼び出されるブロックを登録します。
ブロックは初期結果とは非同期に呼び出され、コレクション内のいずれかのオブジェクトまたはコレクション内のどのオブジェクトのいずれかを変更する書込みトランザクションごとに再度呼び出されます。
ブロックに渡される
change
パラメータは、各書込みトランザクション中に追加、削除、または変更されたオブジェクトをコレクション内のインデックスの形式で報告します。 提供される変更情報の詳細と、その変更情報を使用してUITableView
をアップデートする方法の例については、RealmCollectionChange
のドキュメントを参照してください。ブロックが呼び出される時点で、コレクションは完全に評価され、最新の状態になります。また、同じスレッドで書込みトランザクションを実行したり、
realm.refresh()
を明示的に呼び出したりしない限り、アクセスに関するブロッキングは実行されません動作する。キューが指定されていない場合、通知は標準の実行ループを介して配信されるため、実行ループが他のアクティビティによってブロックされている間は通知を配信できません。 キューが指定されている場合、代わりにそのキューに通知が配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。 これには、初期コレクションの通知を含めることができます。
たとえば、次のコードは通知ブロックを追加した後すぐに書込みトランザクションを実行するため、最初の通知が最初に配信される可能性はありません。 その結果、最初の通知には、書込みトランザクション後の Realm の状態が反映されます。
let dogs = realm.objects(Dog.self) print("dogs.count: \(dogs?.count)") // => 0 let token = dogs.observe { changes in switch changes { case .initial(let dogs): // Will print "dogs.count: 1" print("dogs.count: \(dogs.count)") break case .update: // Will not be hit in this example break case .error: break } } try! realm.write { let dog = Dog() dog.name = "Rex" person.dogs.append(dog) } // end of run loop execution context
キー パスが指定されていない場合、ブロックは、すべてのオブジェクト プロパティとネストされたリンクされたオブジェクトのプロパティの挿入、変更、または削除時に実行されます。 キー パスが指定されている場合、指定されたキー パスでのみ発生する変更に対してブロックが呼び出されます。 たとえば、次の場合:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } // ... let dogs = realm.objects(Dog.self) let token = dogs.observe(keyPaths: [\Dog.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: // ... } } // end of run loop execution context
- 確認されたキー パスが
[\Dog.toys.brand]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 上記の例で
[\Dog.toys]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
注意
個別のキー パスでフィルタリングされる同じオブジェクト上の複数の通知トークンは、排他的にフィルタリングされません。 1 つの通知トークンに対して 1 つのキーパスの変更が満たされた場合、そのオブジェクトのすべての通知トークン ブロックが実行されます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
宣言
Swift
func observe(keyPaths: [PartialKeyPath<Element>], on queue: DispatchQueue? = nil, _ block: @escaping (RealmCollectionChange<Self>) -> Void) -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。 リンクされたプロパティの詳細については、上記の説明を参照してください。
queue
通知を受信するシリアル ディスパッチ キュー。
nil
の場合、通知は現在のスレッドに配信されます。block
変更が発生するたびに呼び出されるブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 確認されたキー パスが
-
observe(keyPaths:
デフォルトの実装、非同期on: _: ) デフォルトの実装
コレクションが変更されるたびに呼び出されるブロックを登録します。
ブロックはコレクションの初期バージョンと非同期に呼び出され、コレクション内のいずれかのオブジェクトまたはコレクション内のどのオブジェクトのいずれかを変更する各書込みトランザクションの後に再度呼び出されます。
ブロックに渡される
actor
パラメータは、この関数に渡すアクターです。 このパラメーターは、アクターへのコールバックを分離するために必要です。ブロックに渡される
change
パラメータは、前回の通知後に追加、削除、または変更されたオブジェクトをコレクション内のインデックスの形式で報告します。 変更列挙のcollection
フィールドは要求されたアクターに分離され、そのアクター内でのみ安全に使用できます。 提供される変更情報の詳細と、その変更情報を使用してUITableView
を更新する方法の例については、RealmCollectionChange
のドキュメントを参照してください。最初の通知が配信されると、コレクションは完全に評価されて最新になり、このコレクションにアクセスしてもブロッキング作業は実行されません。 この保証は、通知が配信されるのと同じアクターで書込みトランザクションを実行しない場合にのみ有効です。 その場合、次の通知が配信される前にコレクションにアクセスするには、クエリを再実行する必要がある可能性があります。
通知は指定されたアクターの実行プログラムに配信されます。 通知をすぐに配信できない場合は、複数の通知が 1 つの通知に統合されることがあります。 これには、初期コレクションの通知を含めることができます。最初の通知が配信される前に発生する書き込みでは、変更通知が生成されない可能性があります。
コレクション内のオブジェクトを追加、削除、または割り当てると常に通知が生成されます。 デフォルトでは、コレクションがリンクするオブジェクト(およびそれらのオブジェクトがリンクするオブジェクト(該当する場合)を変更すると、コレクション内のそのインデックスも変更されていることが報告されます。 キーパスの空でない配列が指定されている場合、それらのキーパスに対する変更のみによってオブジェクトは変更済みとしてマークされます。 例:
class Dog: Object { @Persisted var name: String @Persisted var age: Int @Persisted var toys: List<Toy> } let dogs = realm.objects(Dog.self) let token = await dogs.observe(keyPaths: [\.name], on: myActor) { actor, changes in switch changes { case .initial(let dogs): // Query has finished running and dogs can not be used without blocking 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: // Can no longer happen but is left for backwards compatiblity } }
- 確認されたキー パスが
[\.toys.brand]
の場合、コレクションの要素の いずれか にあるtoys
リストへの挿入または削除によってブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
値を変更すると、ブロックがtriggerされます。 このコレクション内のDog
にリンクされているToy
のbrand
以外の値を変更しても、ブロックはtriggerされません。 監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。 - 上記の例で
[\.toys]
キー パスが確認された場合、コレクション内の任意の要素のtoys
リストへの挿入、削除、または変更によってブロックがtriggerされます。 このコレクション内の にリンクされているToy
Dog
の値を変更しても、ブロックはtrigger され ません 。監視対象のDog
型コレクションへの挿入または削除によって通知がtriggerされます。
アップデートをブロックに送信する場合は、返されたトークンを保持する必要があります。 更新の受信を停止するには、トークンで
invalidate()
を呼び出します。警告
このメソッドは、書込みトランザクション中、または Realm を含む が読み取り専用の場合に呼び出すことができません。
宣言
Swift
@available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *) @_unsafeInheritExecutor func observe<A: Actor>(keyPaths: [PartialKeyPath<Element>], on actor: A, _ block: @Sendable @escaping (isolated A, RealmCollectionChange<Self>) -> Void) async -> NotificationToken
パラメーター
keyPaths
キーパス配列に含まれるプロパティのみが変更されたときにブロックをtriggerします。 空の場合、オブジェクトのプロパティ変更に対して通知が配信されます。 有効な プロパティに対応していないstringキー パスでは例外がスローされます。 リンクされたプロパティの詳細については、上記の説明を参照してください。
actor
通知を分離するアクター。
block
変更が発生するたびに呼び出されるブロック。
戻り値
更新を配信する限り保持する必要があるトークン。
- 確認されたキー パスが