RLMSet
Objective-C
@interface RLMSet<RLMObjectType> : NSObject <RLMCollection>
Swift
@_nonSendable(_assumed) class RLMSet<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject
用于存储不同对象的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 }
-
RLMSet 中的对象以 NSArray 值表示。
声明
Objective-C
@property (nonatomic, readonly) NSArray<RLMObjectType> *_Nonnull allObjects;
Swift
var allObjects: [RLMObjectType] { get }
-
集合中包含的对象的类名。
如果
type
不是 RLMPropertyTypeObject,则将为nil
。声明
Objective-C
@property (nonatomic, copy, readonly, nullable) NSString *objectClassName;
Swift
var objectClassName: String? { get }
-
指示是否无法再访问该集。
声明
Objective-C
@property (nonatomic, readonly, getter=isInvalidated) BOOL invalidated;
Swift
var isInvalidated: Bool { get }
-
指示集合是否已冻结。
冻结集是不可变的,可以从任何线程访问。 冻结集是通过在托管实时集上调用
-freeze
来创建的。 非托管集永远不会冻结。声明
Objective-C
@property (nonatomic, readonly, getter=isFrozen) BOOL frozen;
Swift
var isFrozen: Bool { get }
-
将对象添加到集合中(如果尚不存在)。
警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)addObject:(nonnull RLMObjectType)object;
Swift
func add(_ object: RLMObjectType)
参数
object
该集合中包含的类型的对象。
-
将不同对象的数组添加到集合中。
警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)addObjects:(nonnull id<NSFastEnumeration>)objects;
Swift
func addObjects(_ objects: any NSFastEnumeration)
参数
objects
一个可枚举对象,例如
NSArray
、NSSet
或RLMResults
,其中包含与该集合属于同一类的对象。 -
从集合中删除给定对象。
警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)removeObject:(nonnull RLMObjectType)object;
Swift
func remove(_ object: RLMObjectType)
参数
object
集合中要删除的对象。
-
从集合中删除所有对象。
警告
此方法只能在写事务(write transaction)期间调用。声明
Objective-C
- (void)removeAllObjects;
Swift
func removeAllObjects()
-
清空接收集,然后添加另一个给定集中包含的每个对象。
警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)setSet:(nonnull RLMSet<RLMObjectType> *)set;
Swift
func setSet(_ set: RLMSet<RLMObjectType>)
参数
set
其成员替换接收集内容的 RLMSet。
-
从接收集中删除不属于另一个给定集中成员的每个对象。
警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)intersectSet:(nonnull RLMSet<RLMObjectType> *)set;
Swift
func intersect(_ set: RLMSet<RLMObjectType>)
参数
set
用于执行交集的 RLMSet。
-
从接收集中删除另一个给定集中的每个对象(如果存在)。
警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)minusSet:(nonnull RLMSet<RLMObjectType> *)set;
Swift
func minus(_ set: RLMSet<RLMObjectType>)
参数
set
要从接收集中删除的对象集。
-
将另一个给定集中的每个对象添加到接收集中(如果不存在)。
警告
此方法只能在写事务(write transaction)期间调用。
声明
Objective-C
- (void)unionSet:(nonnull RLMSet<RLMObjectType> *)set;
Swift
func union(_ set: RLMSet<RLMObjectType>)
参数
set
要添加到接收集中的对象集。
-
返回一个布尔值,该值指示接收集中的至少一个对象是否也存在于另一个给定集中。
声明
Objective-C
- (BOOL)intersectsSet:(nonnull RLMSet<RLMObjectType> *)set;
Swift
func intersects(_ set: RLMSet<RLMObjectType>) -> Bool
参数
set
与接收集进行比较的 RLMSet。
返回值
如果接收集中的至少一个对象也存在于 otherSet 中,则为“是”,否则为“否”。
-
返回一个布尔值,该值指示接收集中的每个对象是否也存在于另一个给定集中。
声明
Objective-C
- (BOOL)isSubsetOfSet:(nonnull RLMSet<RLMObjectType> *)set;
Swift
func isSubset(of set: RLMSet<RLMObjectType>) -> Bool
参数
set
与接收集进行比较的 RLMSet。
返回值
如果接收集中的每个对象也存在于 otherSet 中,则为“是”,否则为“否”。
-
返回一个布尔值,指示给定对象是否存在于集合中。
声明
Objective-C
- (BOOL)containsObject:(nonnull RLMObjectType)anObject;
Swift
func contains(_ anObject: RLMObjectType) -> Bool
参数
anObject
要在集合中查找的对象。
返回值
如果集合中存在对象,则为“是”,否则为“否”。
-
将接收集与另一个集进行比较。
声明
Objective-C
- (BOOL)isEqualToSet:(nonnull RLMSet<RLMObjectType> *)otherSet;
Swift
func isEqual(to otherSet: RLMSet<RLMObjectType>) -> Bool
参数
otherSet
与接收集进行比较的集。
返回值
如果 otherSet 的内容与接收集的内容相同,则为 YES,否则为 NO。
-
从给定属性键路径对此集合进行排序和分段,并以
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 的实例。
-
注册一个区块,以便在每次集合更改时调用。
该区块将与初始集合一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改集合中的任何对象、哪些对象在结果中或集合中对象的顺序。
首次调用该区块时,
changes
参数将为nil
。 对于此后的每次调用,它将包含有关在集合中添加、删除或修改了哪些行的信息。 如果写事务(write transaction)未修改集合中的任何对象,则根本不会调用该区块。有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMCollectionChange
文档。存在错误参数只是为了向后兼容,并且将始终为
nil
。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
Person *person = [[Person allObjectsInRealm:realm] firstObject]; NSLog(@"person.dogs.count: %zu", person.dogs.count); // => 0 self.token = [person.dogs addNotificationBlock(RLMSet<Dog *> *dogs, RLMCollectionChange *changes, NSError *error) { // Only fired once for the example NSLog(@"dogs.count: %zu", dogs.count) // => 1 }]; [realm transactionWithBlock:^{ Dog *dog = [[Dog alloc] init]; dog.name = @"Rex"; [person.dogs addObject:dog]; }]; // end of run loop execution context
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
此方法只能在非冻结托管集上调用。
声明
Objective-C
- (nonnull RLMNotificationToken *)addNotificationBlock: (nonnull void (^)(RLMSet<RLMObjectType> *_Nullable, RLMCollectionChange *_Nullable, NSError *_Nullable))block;
Swift
func addNotificationBlock(_ block: @escaping (RLMSet<RLMObjectType>?, RLMCollectionChange?, (any Error)?) -> Void) -> RLMNotificationToken
参数
block
每次集合更改时要调用的区块。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次集合更改时调用。
该区块将与初始集合一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改集合中的任何对象、哪些对象在结果中或集合中对象的顺序。
首次调用该区块时,
changes
参数将为nil
。 对于此后的每次调用,它将包含有关在集合中添加、删除或修改了哪些行的信息。 如果写事务(write transaction)未修改集合中的任何对象,则根本不会调用该区块。有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMCollectionChange
文档。存在错误参数只是为了向后兼容,并且将始终为
nil
。通知将传递到给定队列。 如果队列阻塞且无法立即传递通知,则多个通知可能会合并为一个通知。
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
当包含的 Realm 处于只读或冻结状态时,无法调用此方法。警告
该队列必须是串行队列。
声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock:(nonnull void (^)(RLMSet<RLMObjectType> *_Nullable, RLMCollectionChange *_Nullable, NSError *_Nullable))block queue:(nullable dispatch_queue_t)queue;
Swift
func addNotificationBlock(_ block: @escaping (RLMSet<RLMObjectType>?, RLMCollectionChange?, (any Error)?) -> Void, queue: dispatch_queue_t?) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
queue
要向其传递通知的串行队列。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次集合更改时调用。
该区块将与初始集合一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改集合中的任何对象、哪些对象在结果中或集合中对象的顺序。
首次调用该区块时,
changes
参数将为nil
。 对于此后的每次调用,它将包含有关在集合中添加、删除或修改了哪些行的信息。 如果写事务(write transaction)未修改集合中的任何对象,则根本不会调用该区块。有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMCollectionChange
文档。存在错误参数只是为了向后兼容,并且将始终为
nil
。通知将传递到给定队列。 如果队列阻塞且无法立即传递通知,则多个通知可能会合并为一个通知。
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
当包含的 Realm 处于只读或冻结状态时,无法调用此方法。警告
该队列必须是串行队列。
声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock:(nonnull void (^)(RLMSet<RLMObjectType> *_Nullable, RLMCollectionChange *_Nullable, NSError *_Nullable))block keyPaths:(nullable NSArray<NSString *> *)keyPaths queue:(nullable dispatch_queue_t)queue;
Swift
func addNotificationBlock(_ block: @escaping (RLMSet<RLMObjectType>?, RLMCollectionChange?, (any Error)?) -> Void, keyPaths: [String]?, queue: dispatch_queue_t?) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
keyPaths
这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。
queue
要向其传递通知的串行队列。
返回值
只要您希望传递更新,就必须持有的令牌。
-
注册一个区块,以便在每次集合更改时调用。
该区块将与初始集合一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改集合中的任何对象、哪些对象在结果中或集合中对象的顺序。
首次调用该区块时,
changes
参数将为nil
。 对于此后的每次调用,它将包含有关在集合中添加、删除或修改了哪些行的信息。 如果写事务(write transaction)未修改集合中的任何对象,则根本不会调用该区块。有关如何报告更改的信息以及更新UITableView
的示例,请参阅RLMCollectionChange
文档。存在错误参数只是为了向后兼容,并且将始终为
nil
。通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括带有初始结果的通知。 例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务(write transaction)后 Realm 的状态。
只要您希望继续将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
-invalidate
。警告
当包含的 Realm 处于只读或冻结状态时,无法调用此方法。警告
该队列必须是串行队列。声明
Objective-C
- (nonnull RLMNotificationToken *) addNotificationBlock:(nonnull void (^)(RLMSet<RLMObjectType> *_Nullable, RLMCollectionChange *_Nullable, NSError *_Nullable))block keyPaths:(nullable NSArray<NSString *> *)keyPaths;
Swift
func addNotificationBlock(_ block: @escaping (RLMSet<RLMObjectType>?, RLMCollectionChange?, (any Error)?) -> Void, keyPaths: [String]?) -> RLMNotificationToken
参数
block
发生更改时要调用的区块。
keyPaths
这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。
返回值
只要您希望传递更新,就必须持有的令牌。
-
返回该集中所有对象中给定属性的最小值。
NSNumber *min = [object.setProperty 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 = [object.setProperty 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 = [object.setProperty sumOfProperty:@"age"];
声明
Objective-C
- (nonnull NSNumber *)sumOfProperty:(nonnull NSString *)property;
Swift
func sum(ofProperty property: String) -> NSNumber
参数
property
应对其值求和的属性。 仅支持类型为
int
、float
和double
的属性。返回值
给定属性的总和。
-
返回集合中对象的给定属性的平均值。
NSNumber *average = [object.setProperty averageOfProperty:@"age"];
声明
Objective-C
- (nullable NSNumber *)averageOfProperty:(nonnull NSString *)property;
Swift
func average(ofProperty property: String) -> NSNumber?
参数
property
应计算其平均值的属性。 仅支持类型为
int
、float
和double
的属性。返回值
给定属性的平均值,如果集合为空,则为
nil
。
-
返回该集合的冻结(不可变)快照。
冻结副本是一个不可变的集,其中包含与此 et 当前包含的数据相同的数据,但在写入包含的 Realm 时不会更新。 与活动集不同,冻结集可以从任何线程访问。
警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。警告
此方法只能在托管集上调用。警告
在 Realm 上执行写事务(write transaction)时长时间持有冻结集可能会导致 Realm 文件变大。有关更多信息,请参阅RLMRealmConfiguration.maximumNumberOfActiveVersions
。声明
Objective-C
- (nonnull instancetype)freeze;
Swift
func freeze() -> Self
-
返回此冻结collection的实时版本。
此方法解析对同一冻结collection的实时副本的引用。如果在实时collection上调用,则返回自身。
声明
Objective-C
- (nonnull instancetype)thaw;
Swift
func thaw() -> Self