结构体
以下结构在全局范围内可用。
-
该结构体通过以下方式在 Swift 中启用 RLMObjects 的序列式枚举:
查看更多RLMCollection.makeIterator
声明
Swift
public struct RLMCollectionIterator : IteratorProtocol
-
此结构体通过以下方式在 Swift 中启用 RLMDictionary 的序列式枚举:
查看更多RLMDictionary.makeIterator
声明
Swift
public struct RLMDictionaryIterator : IteratorProtocol
-
一个
Realm
实例(也称为“Realm”)代表一个 Realm 数据库。Realm 可以存储在磁盘上(请参阅
init(path:)
)或内存中(请参阅Configuration
)。Realm
实例在内部缓存,构造等效的Realm
对象(例如,通过使用相同的路径或标识符)产生的开销有限。如果您特别希望确保销毁
Realm
实例(例如,如果您希望打开 Realm,检查某些属性,然后可能删除 Realm 文件并重新打开它),请将使用 Realm 文件的代码放在autoreleasepool {}
内,并确保没有其他强引用对其进行强引用。警告
未冻结的RLMRealm
实例受线程限制,不能跨线程或调度队列共享。 尝试这样做会导致抛出异常。 您必须在要与 Realm 交互的每个线程或队列上获取RLMRealm
的实例。 在获取RLMRealm
实例时,可以通过显式传入队列来将 Realm 限制为调度队列,而不是打开 Realm 的线程。 如果不这样做,尝试在分派到同一队列的多个区块中使用同一实例可能会失败,因为队列并不总是在同一线程上运行。声明
Swift
@frozen public struct Realm
extension Realm: Equatable
-
LinkingObjects
是一种自动更新的container类型。它表示通过属性关系链接到其所属模型对象的零个或多个对象。LinkingObjects
可以使用与List<Element>
和Results<Element>
相同的谓词进行查询。LinkingObjects
始终反映当前线程上的 Realm 的当前状态,包括在当前线程上的写事务(write transaction)期间。唯一的例外是使用for...in
枚举时,该枚举将始终枚举开始枚举时存在的链接对象,即使其中一些对象在枚举期间被删除或修改为不再链接到目标对象。 。
查看更多LinkingObjects
只能用作Object
模型上的属性。声明
Swift
@frozen public struct LinkingObjects<Element> : RealmCollectionImpl where Element : RLMObjectBase, Element : RealmCollectionValue
extension LinkingObjects: RealmSubscribable
extension LinkingObjects: LinkingObjectsProtocol
-
Results
是 Realm 中从对象查询返回的自动更新container类型。Results
可以使用与List<Element>
相同的谓词进行查询,并且可以链式查询以进一步筛选查询结果。Results
始终反映当前线程上的 Realm 的当前状态,包括在当前线程上的写事务(write transaction)期间。唯一的例外是使用for...in
枚举时,该枚举将始终枚举开始枚举时与查询匹配的对象,即使其中一些对象在枚举期间被删除或修改为被筛选器排除。Results
首次访问时延迟求值;它们仅在请求查询结果时才运行查询。 这意味着链接多个临时Results
来对数据进行排序和筛选不会执行任何不必要的中间状态处理工作。评估结果或添加通知块后,系统会立即使结果保持最新,并尽可能在背景线程上完成保持最新的工作。
结果实例无法直接实例化。
查看更多声明
Swift
@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
。声明
Swift
public struct SectionedResults<Key, SectionElement> : SectionedResultImpl where Key : _Persistable, Key : Hashable, SectionElement : RealmCollectionValue
extension SectionedResults: RealmSubscribable
-
查看更多ResultsSection
是一个collection,允许访问属于给定部分键的对象。该集合是延迟评估的,这意味着如果底层集合已更改,则会对部分键进行完全重新计算。 可以观察ResultsSection
实例,并且它也符合ThreadConfined
。声明
Swift
public struct ResultsSection<Key, T> : SectionedResultImpl where Key : _Persistable, Key : Hashable, T : RealmCollectionValue
extension ResultsSection: RealmSubscribable
extension ResultsSection: Identifiable
-
类型擦除的
RealmCollection
。
查看更多RealmCollection
的实例将操作转发到具有相同Element
类型的不透明底层集合。 此类型可用于编写可操作或存储多种类型的 Realm collection的非泛型代码。与直接使用原始集合相比,它没有任何运行时开销。声明
Swift
@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> }
声明
Swift
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
投影到犬名称列表声明
Swift
@dynamicMemberLookup public struct CollectionElementMapper<Element> where Element : RLMObjectBase, Element : RealmCollectionValue
-
Schema
实例表示由 Realm 托管的对象模式的collection。使用 Realm 时,
Schema
实例允许执行迁移和内省数据库模式。模式映射到核心数据库中的collection。
查看更多声明
Swift
@frozen public struct Schema : CustomStringConvertible
extension Schema: Equatable
-
查看更多SectionedResults
实例的迭代器。声明
Swift
@frozen public struct SectionedResultsIterator<Key, Element> : IteratorProtocol where Key : _Persistable, Key : Hashable, Element : RealmCollectionValue
-
查看更多Section
实例的迭代器。声明
Swift
@frozen public struct SectionIterator<Element> : IteratorProtocol where Element : RealmCollectionValue
-
查看更多SortDescriptor
存储键路径和排序顺序以与sorted(sortDescriptors:)
一起使用。 它与NSSortDescriptor
类似,但仅支持可由 Realm 查询引擎高效运行的功能子集。声明
Swift
@frozen public struct SortDescriptor
extension SortDescriptor: CustomStringConvertible
extension SortDescriptor: Equatable
extension SortDescriptor: ExpressibleByStringLiteral
-
封装 Realm 通知的订阅。
查看更多声明
Swift
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @frozen public struct ObservationSubscription : Subscription
-
封装 Realm AsyncOpenTask 的订阅。
查看更多声明
Swift
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @frozen public struct AsyncOpenSubscription : Subscription
-
保存元素在 Map 中的偏移量的容器类型。
查看更多声明
Swift
public struct MapIndex
-
用于在 Map 中保存单个键值条目的container。这用于元组无法表示为通用参数的情况。
查看更多声明
Swift
public struct SingleMapEntry<Key, Value> : _RealmMapValue, Hashable where Key : _MapKey, Value : RealmCollectionValue
-
声明
Swift
@frozen public struct PropertyChange
-
声明
Swift
@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
传递给初始化器,可以将属性设立为类的主键。 不支持复合主节点 (primary node in the replica set)键,将多个属性设置主键会在运行时引发异常。 只有 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 子类上的 属性,并且尝试在其他地方使用它会导致运行时错误。
查看更多声明
Swift
@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)
声明
Swift
@propertyWrapper public struct Projected<T, Value> : AnyProjected where T : RLMObjectBase
-
声明
Swift
@frozen public struct ProjectedPropertyChange
-
Property
实例表示由对象模式上下文中的 Realm 托管的属性。此类属性可能会持久保存在 Realm 文件中,也可能会根据 Realm 中的其他数据进行计算。使用 Realm 时,属性实例允许执行迁移和内省数据库模式。
属性实例映射到核心数据库中的列。
查看更多声明
Swift
@frozen public struct Property : CustomStringConvertible
extension Property: Equatable
-
表示
查看更多String
查询选项的枚举。声明
Swift
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:)
Map
- @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
声明
Swift
@dynamicMemberLookup public struct Query<T>
- not
-
查看更多RealmCollection
实例的迭代器。声明
Swift
@frozen public struct RLMIterator<Element> : IteratorProtocol where Element : RealmCollectionValue
-
查看更多RealmKeyedCollection
实例的迭代器。声明
Swift
@frozen public struct RLMMapIterator<Element> : IteratorProtocol where Element : _RealmMapValue
-
查看更多Map<Key, Value>
的迭代器,可为映射中的每个条目生成(key: Key, value: Value)
对。声明
Swift
@frozen public struct RLMKeyValueIterator<Key, Value> : IteratorProtocol where Key : _MapKey, Value : RealmCollectionValue
-
用于实例化可观察对象的属性包装器类型。
通过将
@StateRealmObject
属性应用于属性声明并提供符合doc://com.apple.documentation/documentation的初始值,在SwiftUI/View
、SwiftUI/App
或SwiftUI/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。声明
Swift
@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
-
一种属性包装器类型,表示对 Realm 进行查询的结果。
结果使用环境值
realmConfiguration
提供的 域 配置。与非 SwiftUI 结果collection不同,ObservedResults 是可变的。写入 ObservedResults collection 会隐式执行写事务(write transaction)。如果将对象添加到 ObservedResults 中,关联查询会过滤掉该对象,则该对象会添加到域中,但不会包含在 ObservedResults 中。
对于 SwiftUI 中的
查看更多@ObservedResults var v
,$v
指的是BoundCollection
。声明
Swift
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) @propertyWrapper @MainActor public struct ObservedResults<ResultType> : DynamicProperty, BoundCollection where ResultType : KeypathSortable, ResultType : RealmFetchable, ResultType : _ObservedResultsValue, ResultType : Identifiable
-
表示分段结果集合的属性包装器类型。
如果初始化程序中未设置
configuration
,则分段结果将使用环境值realmConfiguration
提供的域配置。对于 SwiftUI 中的
查看更多@ObservedSectionedResults var v
,$v
指的是BoundCollection
。声明
Swift
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) @propertyWrapper @MainActor public struct ObservedSectionedResults<Key, ResultType> : DynamicProperty, BoundCollection where Key : _Persistable, Key : Hashable, ResultType : KeypathSortable, ResultType : RealmFetchable, ResultType : _ObservedResultsValue, ResultType : Identifiable
-
声明
Swift
@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 版本的数据将保留,直到所有引用都已解析或解除分配。声明
Swift
@frozen public struct ThreadSafeReference<Confined> where Confined : ThreadConfined
extension ThreadSafeReference: Sendable