RLMCollection
Objective-C
@protocol RLMCollection <NSFastEnumeration, RLMThreadConfined>
Swift
protocol RLMCollection : NSFastEnumeration, RLMThreadConfined
Realm 托管对象的同质集合。 一致类型的示例包括RLMArray
、 RLMSet
、 RLMResults
和RLMLinkingObjects
。
-
collection中的对象的数量。
声明
Objective-C
@property (nonatomic, readonly) NSUInteger count;
Swift
var count: UInt { get }
-
集合中对象的类型。
声明
Objective-C
@property (nonatomic, readonly) RLMPropertyType type;
Swift
var type: RLMPropertyType { get }
-
指示collection中的对象能否为
nil
。声明
Objective-C
@property (nonatomic, readonly, getter=isOptional) BOOL optional;
Swift
var isOptional: Bool { get }
-
集合中包含的对象的类名。
如果
type
不是 RLMPropertyTypeObject,则将为nil
。声明
Objective-C
@property (nonatomic, copy, readonly, nullable) NSString *objectClassName;
Swift
var objectClassName: String? { get }
-
指示集合是否不再有效。
如果在管理 Realm 上调用
invalidate
,则该集合将无效。 非托管集合永远不会失效。声明
Objective-C
@property (nonatomic, readonly, getter=isInvalidated) BOOL invalidated;
Swift
var isInvalidated: Bool { get }
-
返回指定索引处的对象。
声明
Objective-C
- (nonnull id)objectAtIndex:(NSUInteger)index;
Swift
func object(at index: UInt) -> Any
参数
index
要查找的索引。
返回值
集合中包含的类型的对象。
-
返回一个数组,其中包含集合中位于给定索引集指定索引处的对象。 如果索引集包含超出集合边界的索引,则返回
nil
。声明
Objective-C
- (nullable NSArray *)objectsAtIndexes:(nonnull NSIndexSet *)indexes;
Swift
optional func objects(at indexes: IndexSet) -> [Any]?
参数
indexes
集合中要从中检索对象的索引。
返回值
指定索引处的对象。
-
返回集合中的第一个对象。
RLMSet 无序,因此对于集合,这将返回设立中的任意对象。 即使设立中有多个对象,也不能保证它是与
lastObject
给出的对象不同的对象。如果在集合上调用,则返回
nil
。返回值
集合中包含的类型的对象。
-
返回集合中的最后一个对象。
RLMSet 无序,因此对于集合,这将返回设立中的任意对象。 即使设立中有多个对象,也不能保证它是与
firstObject
给出的对象不同的对象。如果在集合上调用,则返回
nil
。返回值
集合中包含的类型的对象。
-
返回对象在集合中的索引。
如果在集合中未找到该对象,则返回
NSNotFound
。声明
Objective-C
- (NSUInteger)indexOfObject:(nonnull id)object;
Swift
optional func index(of object: Any) -> UInt
参数
object
一个对象(与从
objectClassName
选择器返回的类型相同)。 -
返回collection中与谓词匹配的第一个对象的索引。
声明
Objective-C
- (NSUInteger)indexOfObjectWhere:(nonnull NSString *)predicateFormat, ...;
参数
predicateFormat
谓词格式字符串,可以选择后跟可变数量的参数。
返回值
该对象的索引;如果在集合中未找到该对象,则为
NSNotFound
。 -
返回collection中与谓词匹配的第一个对象的索引。
声明
Objective-C
- (NSUInteger)indexOfObjectWithPredicate:(nonnull NSPredicate *)predicate;
Swift
optional func indexOfObject(with predicate: NSPredicate) -> UInt
参数
predicate
用于筛选对象的谓词。
返回值
该对象的索引;如果在集合中未找到该对象,则为
NSNotFound
。
-
返回集合中与给定谓词匹配的所有对象。
仅托管集合支持此功能。
声明
Objective-C
- (nonnull RLMResults *)objectsWhere:(nonnull NSString *)predicateFormat, ...;
参数
predicateFormat
谓词格式字符串,可以选择后跟可变数量的参数。
返回值
包含与给定谓词匹配的对象的
RLMResults
。 -
返回集合中与给定谓词匹配的所有对象。
仅托管集合支持此功能。
声明
Objective-C
- (nonnull RLMResults *)objectsWithPredicate:(nonnull NSPredicate *)predicate;
Swift
func objects(with predicate: NSPredicate) -> RLMResults
参数
predicate
用于筛选对象的谓词。
返回值
包含与给定谓词匹配的对象的
RLMResults
。 -
从集合中返回已排序的
RLMResults
。仅托管集合支持此功能。
声明
Objective-C
- (nonnull RLMResults *)sortedResultsUsingKeyPath:(nonnull NSString *)keyPath ascending:(BOOL)ascending;
Swift
func sortedResults(usingKeyPath keyPath: String, ascending: Bool) -> RLMResults
参数
keyPath
排序依据的 keyPath。
ascending
排序的方向。
返回值
按指定键路径排序的
RLMResults
。 -
从集合中返回已排序的
RLMResults
。仅托管集合支持此功能。
声明
Objective-C
- (nonnull RLMResults *)sortedResultsUsingDescriptors: (nonnull NSArray<RLMSortDescriptor *> *)properties;
Swift
func sortedResults(using properties: [RLMSortDescriptor]) -> RLMResults
参数
properties
要排序的
RLMSortDescriptor
数组。返回值
按指定属性排序的
RLMResults
。 -
从集合中返回不同的
RLMResults
。仅托管集合支持此功能。
声明
Objective-C
- (nonnull RLMResults *)distinctResultsUsingKeyPaths: (nonnull NSArray<NSString *> *)keyPaths;
Swift
func distinctResults(usingKeyPaths keyPaths: [String]) -> RLMResults
参数
keyPaths
使用的键路径会产生不同的结果
返回值
根据指定的键路径进行区分的
RLMResults
-
返回一个
NSArray
,其中包含对集合的每个对象使用key
调用valueForKey:
的结果。声明
Objective-C
- (nullable id)valueForKey:(nonnull NSString *)key;
Swift
func value(forKey key: String) -> Any?
参数
key
属性的名称。
返回值
包含结果的
NSArray
。 -
返回给定键路径标识的派生属性的值。
声明
Objective-C
- (nullable id)valueForKeyPath:(nonnull NSString *)keyPath;
Swift
func value(forKeyPath keyPath: String) -> Any?
参数
keyPath
connection.property 形式的键路径(具有一个或多个关系)。
返回值
keyPath 标识的派生属性的值。
-
setValue:forKey:
使用指定的value
和 在集合的每个对象上调用key
。警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)setValue:(nullable id)value forKey:(nonnull NSString *)key;
Swift
func setValue(_ value: Any?, forKey key: String)
参数
value
对象值。
key
属性的名称。
-
注册一个区块,以便在每次collection更改时调用。
该区块将与初始集合一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改集合中的任何对象或集合中的哪些对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在集合中添加、删除或修改了哪些行的信息。 如果写事务未修改结果集合中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMCollectionChange
文档。存在错误参数只是为了向后兼容,并且将始终为
nil
。在调用该块时,集合对象将被完全评估并保持最新状态,只要您不在同一线程上执行写事务或显式调用
-[RLMRealm refresh]
,访问它就永远不会执行阻塞工作。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
RLMResults
*results = [Dog allObjects]; NSLog(@“dogs.count: %zu”, dogs.count); // => 0 self.token = [results addNotificationBlock:^(RLMResults *dogs, RLMCollectionChange *changes, NSError *error) { // 示例中只触发一次 NSLog(@“dogs.count: %zu” 、dogs.count); // => 1 }]; [realm transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @“Rex”; [realm addObject:dog]; }]; // 运行循环执行上下文结束 只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
在写事务期间,或者当包含的 Realm 处于只读或冻结状态时,无法调用此方法。
声明
Objective-C
- (nonnull RLMNotificationToken *)addNotificationBlock: (nonnull void (^)(RLMResults *_Nullable, RLMCollectionChange *_Nullable, NSError *_Nullable))block;
Swift
func addNotificationBlock(_ block: @escaping (RLMResults?, RLMCollectionChange?, (any Error)?) -> Void) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次collection更改时调用。
该区块将与初始集合一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改集合中的任何对象或集合中的哪些对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在集合中添加、删除或修改了哪些行的信息。 如果写事务未修改结果集合中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMCollectionChange
文档。存在错误参数只是为了向后兼容,并且将始终为
nil
。在调用该块时,集合对象将被完全评估并保持最新状态,只要您不在同一线程上执行写事务或显式调用
-[RLMRealm refresh]
,访问它就永远不会执行阻塞工作。通知将传递到给定队列。 如果队列阻塞且无法立即传递通知,则多个通知可能会合并为一个通知。
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
当包含的 Realm 处于只读或冻结状态时,无法调用此方法。警告
该队列必须是串行队列。
声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock:(nonnull void (^)(RLMResults *_Nullable, RLMCollectionChange *_Nullable, NSError *_Nullable))block queue:(nullable dispatch_queue_t)queue;
Swift
func addNotificationBlock(_ block: @escaping (RLMResults?, RLMCollectionChange?, (any Error)?) -> Void, queue: dispatch_queue_t?) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
queue
要向其传递通知的串行队列。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次collection更改时调用。
该区块将与初始集合一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改集合中的任何对象或集合中的哪些对象。
首次调用该区块时,
change
参数将为nil
。 对于此后的每次调用,它将包含有关在集合中添加、删除或修改了哪些行的信息。 如果写事务未修改结果集合中的任何对象,则根本不会调用该区块。 有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMCollectionChange
文档。存在错误参数只是为了向后兼容,并且将始终为
nil
。在调用该块时,集合对象将被完全评估并保持最新状态,只要您不在同一线程上执行写事务或显式调用
-[RLMRealm refresh]
,访问它就永远不会执行阻塞工作。通知将传递到给定队列。 如果队列阻塞且无法立即传递通知,则多个通知可能会合并为一个通知。
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
当包含的 Realm 处于只读或冻结状态时,无法调用此方法。警告
该队列必须是串行队列。
声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock:(nonnull void (^)(RLMResults *_Nullable, RLMCollectionChange *_Nullable, NSError *_Nullable))block keyPaths:(nullable NSArray<NSString *> *)keyPaths queue:(nullable dispatch_queue_t)queue;
Swift
func addNotificationBlock(_ block: @escaping (RLMResults?, RLMCollectionChange?, (any Error)?) -> Void, keyPaths: [String]?, queue: dispatch_queue_t?) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
queue
要向其传递通知的串行队列。
keyPaths
这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。
返回值
只要您希望传递更新,就必须持有的令牌。
-
从给定属性键路径对此集合进行排序和分段,并以
RLMSectionedResults
的实例形式返回结果。声明
Objective-C
- (nonnull RLMSectionedResults *) sectionedResultsSortedUsingKeyPath:(nonnull NSString *)keyPath ascending:(BOOL)ascending keyBlock: (nonnull RLMSectionedResultsKeyBlock)keyBlock;
Swift
func sectionedResultsSorted(usingKeyPath keyPath: String, ascending: Bool, keyBlock: @escaping RLMSectionedResultsKeyBlock) -> RLMSectionedResults
参数
keyPath
排序所依据的属性键路径。
ascending
排序的方向。
keyBlock
对 Results collection中的每个元素调用的回调。此回调将返回集合中元素的部分键。
返回值
RLMectionedResults 的实例。
-
RLMSectionedResults
根据给定的排序描述符数组对此collection进行排序和分段,并以实例的实例形式返回结果。注意
主排序描述符必须负责确定节键。
声明
Objective-C
- (nonnull RLMSectionedResults *) sectionedResultsUsingSortDescriptors: (nonnull NSArray<RLMSortDescriptor *> *)sortDescriptors keyBlock:(nonnull RLMSectionedResultsKeyBlock) keyBlock;
Swift
func sectionedResults(using sortDescriptors: [RLMSortDescriptor], keyBlock: @escaping RLMSectionedResultsKeyBlock) -> RLMSectionedResults
参数
sortDescriptors
要排序的
RLMSortDescriptor
数组。keyBlock
对 Results collection中的每个元素调用的回调。此回调将返回集合中元素的部分键。
返回值
RLMectionedResults 的实例。
-
返回集合中所有对象中给定属性的最小值。
NSNumber *min = [results minOfProperty:@"age"];
声明
Objective-C
- (nullable id)minOfProperty:(nonnull NSString *)property;
Swift
func min(ofProperty property: String) -> Any?
参数
property
需要其最小值的属性。 仅支持类型为
int
、float
、double
和NSDate
的属性。返回值
该属性的最小值;如果“结果”为空,则为
nil
。 -
返回集合中所有对象中给定属性的最大值。
NSNumber *max = [results maxOfProperty:@"age"];
声明
Objective-C
- (nullable id)maxOfProperty:(nonnull NSString *)property;
Swift
func max(ofProperty property: String) -> Any?
参数
property
需要获取最大值的属性。 仅支持类型为
int
、float
、double
和NSDate
的属性。返回值
该属性的最大值,如果“结果”为空,则为
nil
。 -
返回集合中所有对象的给定属性值的总和。
NSNumber *sum = [results sumOfProperty:@"age"];
声明
Objective-C
- (nonnull NSNumber *)sumOfProperty:(nonnull NSString *)property;
Swift
func sum(ofProperty property: String) -> NSNumber
参数
property
应对其值求和的属性。 仅支持类型为
int
、float
和double
的属性。返回值
给定属性的总和。
-
返回集合中对象的给定属性的平均值。
NSNumber *average = [results averageOfProperty:@"age"];
声明
Objective-C
- (nullable NSNumber *)averageOfProperty:(nonnull NSString *)property;
Swift
func average(ofProperty property: String) -> NSNumber?
参数
property
应计算其平均值的属性。 仅支持类型为
int
、float
和double
的属性。返回值
给定属性的平均值,如果结果为空,则为
nil
。
-
指示集合是否已冻结。
冻结集合是不可变的,可以从任何线程访问。 从冻结集合中读取的对象也将被冻结。
声明
Objective-C
@required @property (nonatomic, readonly, getter=isFrozen) BOOL frozen;
Swift
var isFrozen: Bool { get }
-
返回此collection的冻结(不可变)快照。
冻结副本是一个不可变的collection,其中包含与该collection当前包含的数据相同的数据,但在写入包含的 Realm 时不会更新。与实时集合不同,冻结集合可以从任何线程访问。
警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
在 Realm 上执行写事务(write transaction)时长时间持有冻结的 collection 可能会导致 Realm 文件过大。有关更多信息,请参阅RLMRealmConfiguration.maximumNumberOfActiveVersions
。声明
Objective-C
- (nonnull instancetype)freeze;
Swift
func freeze() -> Self
-
返回此冻结collection的实时版本。
此方法解析对同一冻结collection的实时副本的引用。如果在实时collection上调用,则返回自身。
声明
Objective-C
- (nonnull instancetype)thaw;
Swift
func thaw() -> Self