结构体

以下结构在全局范围内可用。

  • 该结构体通过以下方式在 Swift 中启用 RLMObjects 的序列式枚举: RLMCollection.makeIterator

    查看更多

    声明

    迅速

    public struct RLMCollectionIterator : IteratorProtocol
  • 此结构体通过以下方式在 Swift 中启用 RLMDictionary 的序列式枚举: RLMDictionary.makeIterator

    查看更多

    声明

    迅速

    public struct RLMDictionaryIterator : IteratorProtocol
  • 一个Realm实例(也称为“Realm”)代表一个 Realm 数据库。

    Realm 可以存储在磁盘上(请参阅init(path:) )或内存中(请参阅Configuration )。

    Realm 实例在内部缓存,构造等效的Realm对象(例如,通过使用相同的路径或标识符)产生的开销有限。

    如果您特别希望确保销毁Realm实例(例如,如果您希望打开 Realm,检查某些属性,然后可能删除 Realm 文件并重新打开它),请将使用 Realm 文件的代码放在autoreleasepool {}内,并确保没有其他强引用对其进行强引用。

    警告

    未冻结的RLMRealm实例受线程限制,不能跨线程或调度队列共享。 尝试这样做会导致抛出异常。 您必须在要与 Realm 交互的每个线程或队列上获取RLMRealm的实例。 在获取RLMRealm实例时,可以通过显式传入队列来将 Realm 限制为调度队列,而不是打开 Realm 的线程。 如果不这样做,尝试在分派到同一队列的多个区块中使用同一实例可能会失败,因为队列并不总是在同一线程上运行。
    查看更多

    声明

    迅速

    @frozen
    public struct Realm
    extension Realm: Equatable
  • LinkingObjects 是一种自动更新的container类型。它表示通过属性关系链接到其所属模型对象的零个或多个对象。

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

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

    LinkingObjects 只能用作Object模型上的属性。

    查看更多

    声明

    迅速

    @frozen
    public struct LinkingObjects<Element> : RealmCollectionImpl where Element : RLMObjectBase, Element : RealmCollectionValue
    extension LinkingObjects: RealmSubscribable
    extension LinkingObjects: LinkingObjectsProtocol

AddableType

  • Results 是 Realm 中从对象查询返回的自动更新container类型。

    Results 可以使用与List<Element>相同的谓词进行查询,并且可以链式查询以进一步筛选查询结果。

    Results 始终反映当前线程上的 Realm 的当前状态,包括在当前线程上的写事务(write transaction)期间。唯一的例外是使用for...in枚举时,该枚举将始终枚举开始枚举时与查询匹配的对象,即使其中一些对象在枚举期间被删除或修改为被筛选器排除。

    Results 首次访问时延迟求值;它们仅在请求查询结果时才运行查询。 这意味着链接多个临时Results来对数据进行排序和筛选不会执行任何不必要的中间状态处理工作。

    评估结果或添加通知块后,系统会立即使结果保持最新,并尽可能在背景线程上完成保持最新的工作。

    结果实例无法直接实例化。

    查看更多

    声明

    迅速

    @frozen
    public struct Results<Element> : Equatable, RealmCollectionImpl where Element : RealmCollectionValue
    extension Results: RealmSubscribable
    extension Results: Encodable where Element: Encodable
  • SectionedResults 是一个类型安全的collection,其中包含单个ResultsSection作为其元素。container是延迟评估的,这意味着如果底层collection发生更改,则会对部分键进行完全重新计算。可以观察SectionedResults实例,并且它也符合ThreadConfined

    查看更多

    声明

    迅速

    public struct SectionedResults<Key, SectionElement> : SectionedResultImpl where Key : _Persistable, Key : Hashable, SectionElement : RealmCollectionValue
    extension SectionedResults: RealmSubscribable
  • ResultsSection 是一个collection,允许访问属于给定部分键的对象。该集合是延迟评估的,这意味着如果底层集合已更改,则会对部分键进行完全重新计算。 可以观察ResultsSection实例,并且它也符合ThreadConfined

    查看更多

    声明

    迅速

    public struct ResultsSection<Key, T> : SectionedResultImpl where Key : _Persistable, Key : Hashable, T : RealmCollectionValue
    extension ResultsSection: RealmSubscribable
    extension ResultsSection: Identifiable

观察

  • 类型擦除的RealmCollection

    RealmCollection的实例将操作转发到具有相同Element类型的不透明底层集合。 此类型可用于编写可操作或存储多种类型的 Realm collection的非泛型代码。与直接使用原始集合相比,它没有任何运行时开销。

    查看更多

    声明

    迅速

    @frozen
    public struct AnyRealmCollection<Element> : RealmCollectionImpl where Element : RealmCollectionValue
    extension AnyRealmCollection: RealmSubscribable
    extension AnyRealmCollection: Encodable where Element: Encodable
  • ProjectedCollection 是投影属性的一种特殊集合类型,当您要将 Realm 对象的List投影为值列表时,应使用该集合。 您无需手动实例化此类型。 通过在List属性上调用projectTo来使用它:

    class PersistedListObject: Object {
        @Persisted public var people: List<CommonPerson>
    }
    
    class ListProjection: Projection<PersistedListObject> {
        @Projected(\PersistedListObject.people.projectTo.firstName) var strings: ProjectedCollection<String>
    }
    
    查看更多

    声明

    迅速

    public struct ProjectedCollection<Element> : RandomAccessCollection, CustomStringConvertible, ThreadConfined where Element : RealmCollectionValue
  • CollectionElementMapper 将实际的collection对象转换为ProjectedCollection

    例如:

     class Person: Object {
         @Persisted var dogs: List<Dog>
     }
     class PersonProjection: Projection<Person> {
         @Projected(\Person.dogs.projectTo.name) var dogNames: ProjectedCollection<String>
     }
    

    在此代码中, Person的犬列表将通过projectTo投影到犬名称列表

    声明

    迅速

    @dynamicMemberLookup
    public struct CollectionElementMapper<Element> where Element : RLMObjectBase, Element : RealmCollectionValue
  • Schema 实例表示由 Realm 托管的对象模式的collection。

    使用 Realm 时, Schema实例允许执行迁移和内省数据库模式。

    模式映射到核心数据库中的collection。

    查看更多

    声明

    迅速

    @frozen
    public struct Schema : CustomStringConvertible
    extension Schema: Equatable
  • SectionedResults实例的迭代器。

    查看更多

    声明

    迅速

    @frozen
    public struct SectionedResultsIterator<Key, Element> : IteratorProtocol where Key : _Persistable, Key : Hashable, Element : RealmCollectionValue
  • Section实例的迭代器。

    查看更多

    声明

    迅速

    @frozen
    public struct SectionIterator<Element> : IteratorProtocol where Element : RealmCollectionValue
  • SortDescriptor存储键路径和排序顺序以与sorted(sortDescriptors:)一起使用。 它与NSSortDescriptor类似,但仅支持可由 Realm 查询引擎高效运行的功能子集。

    查看更多

    声明

    迅速

    @frozen
    public struct SortDescriptor
    extension SortDescriptor: CustomStringConvertible
    extension SortDescriptor: Equatable
    extension SortDescriptor: ExpressibleByStringLiteral

订阅

MapIndex

SingleMapEntry

  • 用于在 Map 中保存单个键值条目的container。这用于元组无法表示为通用参数的情况。

    查看更多

    声明

    迅速

    public struct SingleMapEntry<Key, Value> : _RealmMapValue, Hashable where Key : _MapKey, Value : RealmCollectionValue
  • 有关Object更改通知中更改的特定属性的信息。

    查看更多

    声明

    迅速

    @frozen
    public struct PropertyChange
  • 该类表示 Realm 模型对象模式。

    使用 Realm 时, ObjectSchema实例允许执行迁移和内省数据库模式。

    对象模式映射到核心数据库中的表。

    查看更多

    声明

    迅速

    @frozen
    public struct ObjectSchema : CustomStringConvertible
    extension ObjectSchema: Equatable
  • @Persisted 用于声明应由 Realm 托管的对象子类的属性。

    使用示例:

    class MyModel: Object {
        // A basic property declaration. A property with no
        // default value supplied will default to `nil` for
        // Optional types, zero for numeric types, false for Bool,
        // an empty string/data, and a new random value for UUID
        // and ObjectID.
        @Persisted var basicIntProperty: Int
    
        // Custom default values can be specified with the
        // standard Swift syntax
        @Persisted var intWithCustomDefault: Int = 5
    
        // Properties can be indexed by passing `indexed: true`
        // to the initializer.
        @Persisted(indexed: true) var indexedString: String
    
        // Properties can set as the class's primary key by
        // passing `primaryKey: true` to the initializer
        @Persisted(primaryKey: true) var _id: ObjectId
    
        // List and set properties should always be declared
        // with `: List` rather than `= List()`
        @Persisted var listProperty: List<Int>
        @Persisted var setProperty: MutableSet<MyObject>
    
        // LinkingObjects properties require setting the source
        // object link property name in the initializer
        @Persisted(originProperty: "outgoingLink")
        var incomingLinks: LinkingObjects<OtherModel>
    
        // Properties which are not marked with @Persisted will
        // be ignored entirely by Realm.
        var ignoredProperty = true
    }
    

    可以通过将indexed: true传递给初始化器来对 Int、Bool、String、ObjectId 和 Date 属性进行索引。 对属性进行索引可提高对该属性进行相等查询的性能,但写入性能会稍差。 当前没有其他操作使用该索引。

    通过将primaryKey: true传递给初始化器,可以将属性设置为类的主键。不支持复合主键,将多个属性设置为主键会在运行时引发异常。只有 Int、String、UUID 和 ObjectID 属性可以作为主键。主键属性只能在非托管对象上进行更改,在已添加到 Realm 的对象上进行更改会引发异常。

    可以选择使用标准 Swift 语法为属性指定默认值。 如果未给出默认值,则在首次访问时生成一个值:对于所有可选类型,为nil ;对于数字类型为零;对于 Bool 为 false;为空字符串/数据;为 UUID 和 ObjectID 生成一个新的随机值。 List 和 MutableSet 属性不应通过将其设置为空 List/MutableSet 的默认值来定义。 这样做是可行的,但会导致访问 Realm 托管的对象时性能下降。同样,ObjectID 属性不应初始化为ObjectID.generate() ,因为这样做会导致生成额外的 ObjectID,然后在读取 Realm 时将其丢弃。

    如果一个类至少有一个 @Persisted 属性,则 Realm 将忽略所有其他属性。 这意味着它们不会持久保存,也无法用于查询和其他需要托管属性的操作,例如排序和聚合。

    @Persisted 不能用在任何地方,只能用作 对象 或 EmbeddedObject 子类上的 属性,并且尝试在其他地方使用它会导致运行时错误。

    查看更多

    声明

    迅速

    @propertyWrapper
    public struct Persisted<Value> where Value : _Persistable
    extension Persisted: Decodable where Value: Decodable
    extension Persisted: Encodable where Value: Encodable
    extension Persisted: OptionalCodingWrapper where Value: ExpressibleByNilLiteral

投射

  • @Projected 用于声明Projection协议上应由 Realm 托管的属性。

    使用示例:

    public class Person: Object {
        @Persisted var firstName = ""
        @Persisted var lastName = ""
        @Persisted var address: Address?
        @Persisted var friends: List<Person>
        @Persisted var reviews: List<String>
    }
    
    class PersonProjection: Projection<Person> {
        @Projected(\Person.firstName) var firstName
        @Projected(\Person.lastName.localizedUppercase) var lastNameCaps
        @Projected(\Person.address.city) var homeCity
        @Projected(\Person.friends.projectTo.firstName) var firstFriendsName: ProjectedCollection<String>
    }
    
    let people: Results<PersonProjection> = realm.objects(PersonProjection.self)
    
    查看更多

    声明

    迅速

    @propertyWrapper
    public struct Projected<T, Value> : AnyProjected where T : RLMObjectBase

ProjectionObservable

  • 有关Object更改通知中更改的特定属性的信息。

    查看更多

    声明

    迅速

    @frozen
    public struct ProjectedPropertyChange
  • Property 实例表示由对象模式上下文中的 Realm 托管的属性。此类属性可能会持久保存在 Realm 文件中,也可能会根据 Realm 中的其他数据进行计算。

    使用 Realm 时,属性实例允许执行迁移和内省数据库模式。

    属性实例映射到核心数据库中的列。

    查看更多

    声明

    迅速

    @frozen
    public struct Property : CustomStringConvertible
    extension Property: Equatable
  • 表示String查询选项的枚举。

    查看更多

    声明

    迅速

    public struct StringOptions : OptionSet, Sendable
  • Query 是用于创建类型安全查询谓词的类。

    使用Query ,您具有创建 Swift 风格的查询表达式的能力,然后将其构造到NSPredicate中。Query类不应直接实例化,而应仅用作将查询表达式作为参数的闭包中的参数。 示例:

    public func where(_ query: ((Query<Element>) -> Query<Element>)) -> Results<Element>
    

    然后,您可以像这样使用上述函数:

    let results = realm.objects(Person.self).query {
       $0.name == "Foo" || $0.name == "Bar" && $0.age >= 21
    }
    

    支持的谓词类型

    Prefix

    • not ! swift let results = realm.objects(Person.self).query { !$0.dogsName.contains("Fido") || !$0.name.contains("Foo") }

    比较

    • Equals ==
    • 不等于 !=
    • 大于 >
    • 小于 <
    • GreaterThanOrEqual >=
    • LessThanOrEqual <=
    • between .contains(_ range:)

    集合

    • 登录 .contains(_ element:)
    • between .contains(_ range:)

    地图

    • @allKeys .keys
    • @allValues .values

    多个子句

    • &&
    • ||

    collection聚合

    • @avg .avg
    • @min .min
    • @max .max
    • @sum .sum
    • @count .count swift let results = realm.objects(Person.self).query { !$0.dogs.age.avg >= 0 || !$0.dogsAgesArray.avg >= 0 }

    其他

    • not !
    • subquery ($0.fooList.intCol >= 5).count > n
    查看更多

    声明

    迅速

    @dynamicMemberLookup
    public struct Query<T>
  • RealmCollection实例的迭代器。

    查看更多

    声明

    迅速

    @frozen
    public struct RLMIterator<Element> : IteratorProtocol where Element : RealmCollectionValue
  • RealmKeyedCollection实例的迭代器。

    查看更多

    声明

    迅速

    @frozen
    public struct RLMMapIterator<Element> : IteratorProtocol where Element : _RealmMapValue
  • Map<Key, Value>的迭代器,可为映射中的每个条目生成(key: Key, value: Value)对。

    查看更多

    声明

    迅速

    @frozen
    public struct RLMKeyValueIterator<Key, Value> : IteratorProtocol where Key : _MapKey, Value : RealmCollectionValue

StateRealmObject

  • 用于实例化可观察对象的属性包装器类型。

    通过将@StateRealmObject属性应用于属性声明并提供符合doc://com.apple.documentation/documentation的初始值,在SwiftUI/ViewSwiftUI/AppSwiftUI/Scene中创建状态 Realm 对象/Combine/ObservableObject 协议:

    @StateRealmObject var model = DataModel()
    

    SwiftUI 仅为声明该对象的结构体的每个实例创建该对象的新实例一次。 当可观察的 Realm 对象的已发布属性发生变化时,SwiftUI 会更新任何视图中依赖于这些属性的部分。如果非托管,则将从对象本身读取属性,否则将从底层 Realm 读取。 对该值的更改将异步更新视图:

    Text(model.title) // Updates the view any time `title` changes.
    

    您可以将状态对象传递给具有SwiftUI/ObservedRealmObject属性的属性。

    使用$操作符获取状态对象属性之一的SwiftUI/Binding 。 如果要创建与对象属性之一的双向连接,请使用绑定。 例如,您可以让SwiftUI/Toggle控制存储在模型中名为isEnabled的布尔值:

    Toggle("Enabled", isOn: $model.isEnabled)
    

    这会将修改后的isEnabled属性写入model对象的 Realm。

    查看更多

    声明

    迅速

    @available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *)
    @MainActor
    @propertyWrapper
    public struct StateRealmObject<T> : DynamicProperty where T : RealmSubscribable, T : ThreadConfined, T : Equatable

ObservedResults

  • 一种属性包装器类型,表示对 Realm 进行查询的结果。

    结果使用环境值realmConfiguration提供的 域 配置。

    与非 SwiftUI 结果collection不同,ObservedResults 是可变的。写入 ObservedResults collection 会隐式执行写事务(write transaction)。如果将对象添加到 ObservedResults 中,关联查询会过滤掉该对象,则该对象会添加到域中,但不会包含在 ObservedResults 中。

    对于 SwiftUI 中的@ObservedResults var v$v指的是BoundCollection

    查看更多

    声明

    迅速

    @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
    @propertyWrapper
    public struct ObservedResults<ResultType> : DynamicProperty, BoundCollection where ResultType : KeypathSortable, ResultType : RealmFetchable, ResultType : _ObservedResultsValue, ResultType : Identifiable
  • 表示分段结果集合的属性包装器类型。

    如果初始化程序中未设置configuration ,则分段结果将使用环境值realmConfiguration提供的域配置。

    对于 SwiftUI 中的@ObservedSectionedResults var v$v指的是BoundCollection

    查看更多

    声明

    迅速

    @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
    @propertyWrapper
    public struct ObservedSectionedResults<Key, ResultType> : DynamicProperty, BoundCollection where Key : _Persistable, Key : Hashable, ResultType : KeypathSortable, ResultType : RealmFetchable, ResultType : _ObservedResultsValue, ResultType : Identifiable

ObservedRealmObject

  • 一种属性包装器类型,用于订阅可观察 Realm ObjectList ,并在可观察对象发生更改时使视图失效。

    查看更多

    声明

    迅速

    @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
    @MainActor
    @propertyWrapper
    public struct ObservedRealmObject<ObjectType>: DynamicProperty
    where ObjectType: RealmSubscribable & ThreadConfined & ObservableObject & Equatable
  • 要在线程之间传递的对象,其中包含对其线程限制对象的线程安全引用。

    要在不同线程上解析目标 Realm 的线程安全引用,请传递给Realm.resolve(_:)

    警告

    ThreadSafeReference对象最多必须解析一次。 无法解析ThreadSafeReference将导致 Realm 的源版本被固定,直到引用被解除分配。

    注意

    首选短期ThreadSafeReference ,因为源 Realm 版本的数据将保留,直到所有引用都已解析或解除分配。

    查看更多

    声明

    迅速

    @frozen
    public struct ThreadSafeReference<Confined> where Confined : ThreadConfined
    extension ThreadSafeReference: Sendable