LinkingObjects

@frozen
public struct LinkingObjects<Element> where Element : ObjectBase, Element : RealmCollectionValue
extension LinkingObjects: RealmSubscribable
extension LinkingObjects: RealmCollection

LinkingObjects 是一种自动更新的container类型。它表示通过属性关系链接到其所属模型对象的零个或多个对象。

LinkingObjects 可以使用与List<Element>Results<Element>相同的谓词进行查询。

LinkingObjects 始终反映当前线程上的 Realm 的当前状态,包括在当前线程上的写事务(write transaction)期间。唯一的例外是使用for...in枚举时,该枚举将始终枚举开始枚举时存在的链接对象,即使其中一些对象在枚举期间被删除或修改为不再链接到目标对象。 。

LinkingObjects 只能用作Object模型上的属性。这种类型的属性必须声明为let且不能为dynamic

属性

  • 管理链接对象的 Realm,如果链接对象为非托管对象,则为nil

    声明

    迅速

    public var realm: Realm? { get }
  • 指示链接对象是否不再有效。

    如果在包含realm的实例上调用invalidate() ,则链接对象将无效。

    可以访问失效的链接对象,但始终为空。

    声明

    迅速

    public var isInvalidated: Bool { get }
  • 链接对象的数量。

    声明

    迅速

    public var count: Int { get }

初始化器

  • 创建LinkingObjects的实例。 仅当在 Realm 模型上声明属性时才应调用此初始化程序。

    声明

    迅速

    public init(fromType _: Element.Type, property propertyName: String)

    参数

    type

    拥有链接对象应引用的属性的对象的类型。

    propertyName

    链接对象应引用的属性的名称。

  • 对链接对象所表示的对象的人类可读描述。

    声明

    迅速

    public var description: String { get }

索引检索

  • 返回对象在链接对象中的索引,如果该对象不存在,则返回nil

    声明

    迅速

    public func index(of object: Element) -> Int?

    参数

    object

    正在查询其索引的对象。

  • 返回与给定谓词匹配的第一个对象的索引,如果没有对象匹配,则返回nil

    声明

    迅速

    public func index(matching predicate: NSPredicate) -> Int?

    参数

    predicate

    用于筛选对象的谓词。

对象检索

  • 返回给定index处的对象。

    声明

    迅速

    public subscript(index: Int) -> Element { get }

    参数

    index

    索引。

  • 返回链接对象中的第一个对象,如果链接对象为空,则返回nil

    声明

    迅速

    public var first: Element? { get }
  • 返回链接对象中的最后一个对象,如果链接对象为空,则返回nil

    声明

    迅速

    public var last: Element? { get }

KVC

  • 返回一个Array ,其中包含对每个链接对象调用valueForKey(_:)key的结果。

    声明

    迅速

    public func value(forKey key: String) -> Any?

    参数

    key

    所需值的属性的名称。

  • 返回一个Array ,其中包含对每个链接对象调用valueForKeyPath(_:)keyPath的结果。

    声明

    迅速

    public func value(forKeyPath keyPath: String) -> Any?

    参数

    keyPath

    所需值属性的键路径。

  • setValue(_:forKey:)使用指定的value 和 在每个链接对象上调用key

    警告

    此方法只能在写事务(write transaction)期间调用。

    声明

    迅速

    public func setValue(_ value: Any?, forKey key: String)

    参数

    value

    要为属性设置的值。

    key

    应在每个对象上设置其值的属性的名称。

过滤

  • 返回一个Results ,其中包含与链接对象中的给定谓词匹配的所有对象。

    声明

    迅速

    public func filter(_ predicate: NSPredicate) -> Results<Element>

    参数

    predicate

    用于筛选对象的谓词。

排序

  • 返回包含所有链接对象的Results ,但已排序。

    对象根据给定键路径的值进行排序。 例如,要根据Student age属性对collection从新到旧进行排序,您可以调用students.sorted(byKeyPath: "age", ascending: true)

    警告

    collection只能按boolean、 DateNSDate 、单精度和双精度浮点、整数和字符串类型的属性进行排序。

    声明

    迅速

    public func sorted(byKeyPath keyPath: String, ascending: Bool = true) -> Results<Element>

    参数

    keyPath

    排序依据的键路径。

    ascending

    排序的方向。

  • 返回包含所有链接对象的Results ,但已排序。

    警告

    collection只能按boolean、 DateNSDate 、单精度和双精度浮点、整数和字符串类型的属性进行排序。

    声明

    迅速

    public func sorted<S: Sequence>(by sortDescriptors: S) -> Results<Element>
        where S.Iterator.Element == SortDescriptor

    参数

    sortDescriptors

    作为排序依据的SortDescriptor序列。

聚合操作

  • 返回所有链接对象中给定属性的最小值,如果链接对象为空,则返回nil

    警告

    只能指定类型符合MinMaxType协议的属性。

    声明

    迅速

    public func min<T>(ofProperty property: String) -> T? where T : MinMaxType

    参数

    property

    所需最小值的属性名称。

  • 返回所有链接对象中给定属性的最大值,如果链接对象为空,则返回nil

    警告

    只能指定类型符合MinMaxType协议的属性。

    声明

    迅速

    public func max<T>(ofProperty property: String) -> T? where T : MinMaxType

    参数

    property

    所需最小值的属性名称。

  • 返回所有链接对象的给定属性值的总和。

    警告

    只能指定类型符合AddableType协议的属性。

    声明

    迅速

    public func sum<T>(ofProperty property: String) -> T where T : AddableType

    参数

    property

    应对其值求和的属性的名称。

  • 返回所有链接对象的给定属性的平均值,如果链接对象为空,则返回nil

    警告

    只能指定类型符合AddableType协议的属性的名称。

    声明

    迅速

    public func average<T>(ofProperty property: String) -> T? where T : AddableType

    参数

    property

    应计算其平均值的属性的名称。

通知

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

    该区块将与初始结果一起异步调用,然后在每次写事务(write transaction)后再次调用,这会更改collection中的任何对象或collection中的哪些对象。

    传递给区块的change参数以collection内索引的形式报告在每个写事务(write transaction)期间添加、删除或修改了哪些对象。有关所提供变更信息的更多信息,以及如何使用这些信息来更新UITableView的示例,请参阅RealmCollectionChange文档。

    调用区块时,collection将进行全面求值且是最新的,只要不在同一线程上执行写事务(write transaction)或显式调用realm.refresh() ,访问该collection就永远不会执行阻塞工作。

    如果未指定队列,则将通过标准事件循环传递通知,因此当事件循环被其他活动阻塞时无法传递通知。如果给出了队列,则将通知传递到该队列。 当无法立即传递通知时,可以将多个通知合并为一个通知。 这可以包括初始collection的通知。

    例如,以下代码在添加通知块后立即执行写事务(write transaction),因此没有机会首先传递初始通知。因此,初始通知将反映写事务后 Realm 的状态。

    let results = 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
    

    只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用invalidate()

    警告

    在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。

    声明

    迅速

    public func observe(on queue: DispatchQueue? = nil,
                        _ block: @escaping (RealmCollectionChange<LinkingObjects>) -> Void) -> NotificationToken

    参数

    queue

    用于接收通知的串行调度队列。 如果为nil ,则通知将传递到当前线程。

    block

    发生更改时要调用的区块。

    返回值

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

冻结对象

  • 如果此集合已冻结,则返回。

    声明

    迅速

    public var isFrozen: Bool { get }
  • 返回此collection的冻结(不可变)快照。

    冻结副本是一个不可变的collection,其中包含与该collection当前包含的数据相同的数据,但在写入包含的 Realm 时不会更新。与实时集合不同,冻结集合可以从任何线程访问。

    警告

    在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。

    警告

    在 Realm 上执行写事务(write transaction)时长时间持有冻结的 collection 可能会导致 Realm 文件过大。有关更多信息,请参阅Realm.Configuration.maximumNumberOfActiveVersions

    声明

    迅速

    public func freeze() -> LinkingObjects
  • 返回此冻结collection的实时版本。

    此方法解析对同一冻结collection的实时副本的引用。如果在实时collection上调用,则返回自身。

    声明

    迅速

    public func thaw() -> LinkingObjects<Element>?

LinkingObjects

  • 每次collection更改时发出 Void 的发布者。

    尽管有这个名称,但它实际上是在collection发生更改发出的。

    声明

    迅速

    public var objectWillChange: RealmPublishers.WillChange<LinkingObjects> { get }

序列支持

集合支持