名单

public final class List<Element> : RLMSwiftCollectionBase where Element : RealmCollectionValue
extension List: ObservableObject, RealmSubscribable
extension List: RealmCollection
extension List: MutableCollection
extension List: Decodable where Element: Decodable
extension List: Encodable where Element: Encodable

List 是 Realm 中用于定义多个 container 关系的类型。

与 Swift 的Array一样, List是一种泛型类型,会根据其存储的类型进行参数化。 它可以是Object子类或以下类型之一: BoolIntInt8Int16Int32Int64FloatDoubleStringDataDateDecimal128ObjectId (及其可选版本)

与 Swift 的原生collection不同, List是引用类型,只有当托管它们的 Realm 以只读方式打开时,它们才是不可变的。

可以使用与Results<Element>相同的谓词对列表进行过滤和排序。

Object子类上定义的List类型的属性必须声明为let ,并且不能为dynamic

属性

初始化器

  • 创建一个List ,用于保存类型为Element的 Realm 模型对象。

    声明

    Swift

    public override init()

数数

索引检索

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

    声明

    Swift

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

    参数

    object

    要查找的对象。

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

    声明

    Swift

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

    参数

    predicate

    用于筛选对象的谓词。

对象检索

  • 返回位于给定索引处的对象 (get),或替换位于给定索引处的对象 (set)。

    警告

    您只能在写事务(write transaction)期间设置对象。

    声明

    Swift

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

    参数

    index

    要检索或替换的对象的索引。

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

    声明

    Swift

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

    声明

    Swift

    public var last: Element? { get }

KVC

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

    声明

    Swift

    @nonobjc
    public func value(forKey key: String) -> [AnyObject]
  • 返回一个Array ,其中包含对集合的每个对象使用keyPath调用valueForKeyPath(_:)的结果。

    声明

    Swift

    @nonobjc
    public func value(forKeyPath keyPath: String) -> [AnyObject]

    参数

    keyPath

    所需值属性的键路径。

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

    警告

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

    声明

    Swift

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

    参数

    value

    对象值。

    key

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

过滤

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

    声明

    Swift

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

    参数

    predicate

    用于筛选对象的谓词。

排序

  • 返回包含列表中对象的Results ,但已排序。

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

    警告

    列表只能按布尔值、DateNSDate、单精度和双精度点、整数和string类型的属性进行排序。

    声明

    Swift

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

    参数

    keyPath

    排序依据的键路径。

    ascending

    排序的方向。

  • 返回包含列表中对象的Results ,但已排序。

    警告

    列表只能按布尔值、DateNSDate、单精度和双精度点、整数和string类型的属性进行排序。

    声明

    Swift

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

聚合操作

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

    警告

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

    声明

    Swift

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

    参数

    property

    所需最小值的属性名称。

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

    警告

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

    声明

    Swift

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

    参数

    property

    期望获取最大值的属性的名称。

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

    警告

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

    声明

    Swift

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

    参数

    property

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

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

    警告

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

    声明

    Swift

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

    参数

    property

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

变更

  • 将给定对象追加到列表末尾。

    如果该对象由与接收器不同的 Realm 托管,则会创建一个副本并将其添加到托管接收器的 Realm 中。

    警告

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

    声明

    Swift

    public func append(_ object: Element)

    参数

    object

    一个对象。

  • 将给定序列中的对象追加到列表末尾。

    警告

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

    声明

    Swift

    public func append<S>(objectsIn objects: S) where Element == S.Element, S : Sequence
  • 在给定索引处插入一个对象。

    警告

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

    警告

    如果使用无效索引调用此方法,则会引发异常。

    声明

    Swift

    public func insert(_ object: Element, at index: Int)

    参数

    object

    一个对象。

    index

    要插入对象的索引。

  • 删除给定索引处的对象。 该对象不会从托管它的 Realm 中删除。

    警告

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

    警告

    如果使用无效索引调用此方法,则会引发异常。

    声明

    Swift

    public func remove(at index: Int)

    参数

    index

    要删除对象的索引。

  • 从列表中删除所有对象。 对象不会从管理它们的 Realm 中删除。

    警告

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

    声明

    Swift

    public func removeAll()
  • 用新对象替换给定索引处的对象。

    警告

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

    警告

    如果使用无效索引调用此方法,则会引发异常。

    声明

    Swift

    public func replace(index: Int, object: Element)

    参数

    index

    要替换的对象的索引。

    object

    一个对象。

  • 将给定源索引处的对象移动到给定目标索引处。

    警告

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

    警告

    如果使用无效索引调用此方法,则会引发异常。

    声明

    Swift

    public func move(from: Int, to: Int)

    参数

    from

    要移动的对象的索引。

    to

    from处的对象应移动到的索引。

  • 交换列表中给定索引处的对象。

    警告

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

    警告

    如果使用无效索引调用此方法,则会引发异常。

    声明

    Swift

    public func swapAt(_ index1: Int, _ index2: Int)

    参数

    index1

    应替换索引index2处对象的对象索引。

    index2

    应替换索引index1处对象的对象索引。

通知

  • 注册一个区块,以便在每次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 为只读时,无法调用此方法。

    声明

    Swift

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

    参数

    queue

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

    block

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

    返回值

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

冻结对象

名单

序列支持

  • 返回一个RLMIterator ,它产生List中的连续元素。

    声明

    Swift

    public func makeIterator() -> RLMIterator<Element>
  • 将给定的subRange元素替换为newElements

    声明

    Swift

    public func replaceSubrange<C: Collection, R>(_ subrange: R, with newElements: C)
        where C.Iterator.Element == Element, R: RangeExpression, List<Element>.Index == R.Bound

    参数

    subrange

    要替换的元素范围。

    newElements

    要插入到列表中的新元素。

  • 非空collection中第一个元素的位置。与空collection中的 endIndex 相同。

    声明

    Swift

    public var startIndex: Int { get }
  • 集合的“超过末尾”位置。 endIndex 不是下标的有效参数,但始终可以通过零次或多次应用程序 successor() 从 startIndex 访问 endIndex。

    声明

    Swift

    public var endIndex: Int { get }
  • 声明

    Swift

    public func index(after i: Int) -> Int
  • 声明

    Swift

    public func index(before i: Int) -> Int

MutableCollection 一致性,范围可替换collection模拟

  • 声明

    Swift

    public typealias SubSequence = Slice<List>
  • 返回给定范围内的对象 (get),或用新对象替换给定范围内的对象 (set)。

    警告

    对象只能在写事务(write transaction)期间设置。

    声明

    Swift

    public subscript(bounds: Range<Int>) -> SubSequence { get set }

    参数

    index

    要检索或替换的对象的索引。

  • 从列表开头删除指定数量的对象。 对象不会从托管它们的 Realm 中删除。

    警告

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

    声明

    Swift

    public func removeFirst(_ number: Int = 1)
  • 从列表末尾删除指定数量的对象。 对象不会从托管它们的 Realm 中删除。

    警告

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

    声明

    Swift

    public func removeLast(_ number: Int = 1)
  • 将给定集合中的项目插入列表中的给定位置。

    警告

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

    声明

    Swift

    public func insert<C>(contentsOf newElements: C, at i: Int) where Element == C.Element, C : Collection
  • 从列表中删除给定范围的对象。

    警告

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

    声明

    Swift

    public func removeSubrange<R>(_ boundsExpression: R) where R : RangeExpression, R.Bound == Int

适用于以下位置: ElementMinMaxType

  • 返回列表中的最小值,如果列表为空,则返回nil

    声明

    Swift

    public func min() -> Element?
  • 返回列表中的最大值,如果列表为空,则返回nil

    声明

    Swift

    public func max() -> Element?

适用于以下位置: ElementAddableType

适用于以下位置: ElementDecodable

适用于以下位置: ElementEncodable