RLMSet

Objective-C

@interface RLMSet<RLMObjectType> : NSObject <RLMCollection>

Swift

@_nonSendable(_assumed) class RLMSet<RLMObjectType> : NSObject, RLMCollection where RLMObjectType : AnyObject

用于存储不同对象的collection数据类型。

注意

RLMSet 支持存储基元和RLMObject类型。 RLMSet不支持存储嵌入式 Realm 对象。

属性

  • 集合中的对象数量。

    声明

    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 }
  • 托管该集合的 Realm。对于非托管集,返回nil

    声明

    Objective-C

    @property (nonatomic, readonly, nullable) RLMRealm *realm;

    Swift

    var realm: RLMRealm? { 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

    一个可枚举对象,例如NSArrayNSSetRLMResults ,其中包含与该集合属于同一类的对象。

  • 从集合中删除给定对象。

    警告

    此方法只能在写事务(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。

对集进行剖分

通知

  • 注册一个区块,以便在每次集合更改时调用。

    该区块将与初始集合一起异步调用,然后在每次写事务(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"];
    

    警告

    不能在RLMObjectRLMArrayRLMSetNSData属性上使用此方法。

    声明

    Objective-C

    - (nullable id)minOfProperty:(nonnull NSString *)property;

    Swift

    func min(ofProperty property: String) -> Any?

    参数

    property

    需要其最小值的属性。 仅支持类型为intfloatdoubleNSDate的属性。

    返回值

    该属性的最小值;如果该集合为空,则为nil

  • 返回集中所有对象中给定属性的最大值。

    NSNumber *max = [object.setProperty maxOfProperty:@"age"];
    

    警告

    不能在RLMObjectRLMArrayRLMSetNSData属性上使用此方法。

    声明

    Objective-C

    - (nullable id)maxOfProperty:(nonnull NSString *)property;

    Swift

    func max(ofProperty property: String) -> Any?

    参数

    property

    需要获取最大值的属性。 仅支持类型为intfloatdoubleNSDate的属性。

    返回值

    该属性的最大值,如果该集合为空,则为nil

  • 返回集合中所有对象的给定属性的不同值的总和。

    NSNumber *sum = [object.setProperty sumOfProperty:@"age"];
    

    警告

    您不能在RLMObjectRLMArrayRLMSet and NSData` 属性上使用此方法。

    声明

    Objective-C

    - (nonnull NSNumber *)sumOfProperty:(nonnull NSString *)property;

    Swift

    func sum(ofProperty property: String) -> NSNumber

    参数

    property

    应对其值求和的属性。 仅支持类型为intfloatdouble的属性。

    返回值

    给定属性的总和。

  • 返回集合中对象的给定属性的平均值。

    NSNumber *average = [object.setProperty averageOfProperty:@"age"];
    

    警告

    不能在RLMObjectRLMSetRLMArrayNSData属性上使用此方法。

    声明

    Objective-C

    - (nullable NSNumber *)averageOfProperty:(nonnull NSString *)property;

    Swift

    func average(ofProperty property: String) -> NSNumber?

    参数

    property

    应计算其平均值的属性。 仅支持类型为intfloatdouble的属性。

    返回值

    给定属性的平均值,如果集合为空,则为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

不可用的方法

  • 不可用

    无法直接创建 RLMSet

    -[RLMSet init] 不可用,因为无法直接创建RLMSetRLMSetRLMObject上的 属性是在访问时延迟创建的。

    声明

    Objective-C

    - (nonnull instancetype)init;
  • 不可用

    RLMSet 无法直接创建

    +[RLMSet new] 不可用,因为无法直接创建RLMSetRLMSetRLMObject上的 属性是在访问时延迟创建的。

    声明

    Objective-C

    + (nonnull instancetype)new;