RLMCollection

Objective-C

@protocol RLMCollection <NSFastEnumeration, RLMThreadConfined>

Swift

protocol RLMCollection : NSFastEnumeration, RLMThreadConfined

Realm 托管对象的同质集合。 一致类型的示例包括RLMArrayRLMSetRLMResultsRLMLinkingObjects

属性

  • 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 (如果有)。

    声明

    Objective-C

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

    Swift

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

    声明

    Objective-C

    - (nullable id)firstObject;

    Swift

    optional func firstObject() -> Any?

    返回值

    集合中包含的类型的对象。

  • 返回集合中的最后一个对象。

    RLMSet 无序,因此对于集合,这将返回设立中的任意对象。 即使设立中有多个对象,也不能保证它是与firstObject给出的对象不同的对象。

    如果在集合上调用,则返回nil

    声明

    Objective-C

    - (nullable id)lastObject;

    Swift

    optional func lastObject() -> Any?

    返回值

    集合中包含的类型的对象。

  • 返回对象在集合中的索引。

    如果在集合中未找到该对象,则返回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

    这些键路径上发生的更改将调用该区块。 如果未给出键路径,则为每个属性键路径传递通知。

    返回值

    只要您希望传递更新,就必须持有的令牌。

分段结果

聚合属性值

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

    NSNumber *min = [results minOfProperty:@"age"];
    

    警告

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

    声明

    Objective-C

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

    Swift

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

    参数

    property

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

    返回值

    该属性的最小值;如果“结果”为空,则为nil

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

    NSNumber *max = [results maxOfProperty:@"age"];
    

    警告

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

    声明

    Objective-C

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

    Swift

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

    参数

    property

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

    返回值

    该属性的最大值,如果“结果”为空,则为nil

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

    NSNumber *sum = [results sumOfProperty:@"age"];
    

    警告

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

    声明

    Objective-C

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

    Swift

    func sum(ofProperty property: String) -> NSNumber

    参数

    property

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

    返回值

    给定属性的总和。

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

    NSNumber *average = [results averageOfProperty:@"age"];
    

    警告

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

    声明

    Objective-C

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

    Swift

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

    参数

    property

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

    返回值

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