协议
以下协议在全球范围内可用。
-
定义对 RLMArray、RLMSet 和 RLMResults 的迭代器支持的协议。
查看更多声明
Swift
public protocol _RLMCollectionIterator : Sequence
-
定义 RLMDictionary 迭代器支持的协议
声明
Swift
public protocol _RLMDictionaryIterator
-
一种标签协议,用于标记可用作同步 Realm 分区值的类型。
声明
Swift
public protocol PartitionValue : Sendable
-
表示 BSON 值的协议。
另请参阅
bsonspec.org声明
Swift
public protocol BSON : PartitionValue, Equatable
-
为 Realm 对象定义默认身份的协议
将 Object 子类声明为符合此协议将为
Identifiable
的id
提供默认实现,该实现适用于 Realm 对象:// Automatically conforms to `Identifiable` class MyObjectType: Object, ObjectKeyIdentifiable { // ... }
如果您愿意,也可以手动遵守
查看更多Identifiable
,但请注意,使用对象的内存地址不适用于托管对象。声明
Swift
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public protocol ObjectKeyIdentifiable : Identifiable
-
可传递给
valuePublisher()
或changesetPublisher()
的类型。声明
Swift
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public protocol RealmSubscribable
-
声明
Swift
public protocol RealmCollection : RealmCollectionBase, Equatable where Self.Iterator == RLMIterator<Self.Element>
-
声明
Swift
public protocol RealmKeyedCollection : ThreadConfined, CustomStringConvertible, Sequence
-
一种可以与 Realm 支持的类型相互映射的类型。
要在 Realm 原生不支持的 Realm 中存储类型,请将该类型声明为符合 CustomPersistable 或 FailableCustomPersistable。这需要定义一个名为
PersistedType
的关联类型(指示此类型将映射到什么 Realm 类型)、一个采用PersistedType
的初始化程序以及一个返回相应PersistedType
的属性。 例如,要使URL
持久化:// Not all strings are valid URLs, so this uses // FailableCustomPersistable to handle the case when the data // in the Realm isn't a valid URL. extension URL: FailableCustomPersistable { typealias PersistedType = String init?(persistedValue: String) { self.init(string: persistedValue) } var persistableValue: PersistedType { self.absoluteString } }
完成此操作后,您可以使用 URL 定义属性:
class MyModel: Object { @Persisted var url: URL @Persisted var mapOfUrls: Map<String, URL> }
PersistedType
可以是 Realm 或EmbeddedObject
子类支持的任何基元类型。 如果需要为映射类型存储多条数据,可以使用EmbeddedObject
子类。 例如,要存储CGPoint
:// Define the storage object. A type used for custom mappings // does not have to be used exclusively for custom mappings, // and more than one type can map to a single embedded object // type. class CGPointObject: EmbeddedObject { @Persisted var double: x @Persisted var double: y } // Define the mapping. This mapping isn't failable, as the // data stored in the Realm can always be interpreted as a // CGPoint. extension CGPoint: CustomPersistable { typealias PersistedType = CGPointObject init(persistedValue: CGPointObject) { self.init(x: persistedValue.x, y: persistedValue.y) } var persistableValue: PersistedType { CGPointObject(value: [x, y]) } } class PointModel: Object { // Note that types which are mapped to embedded objects do // not have to be optional (but can be). @Persisted var point: CGPoint @Persisted var line: List<CGPoint> }
查询是对持久化类型执行的,而不是对自定义持久化类型执行的。 传递到查询中的值可以是持久类型,也可以是自定义持久类型。 对于映射到嵌入式对象的自定义持久类型,将使用成员相等性。 例如,
查看更多realm.objects(PointModel.self).where { $0.point == CGPoint(x: 1, y: 2) }
相当于"point.x == 1 AND point.y == 2"
。声明
Swift
public protocol CustomPersistable : _CustomPersistable
-
一种可以与 Realm 支持的类型相互映射的类型。
此协议与
CustomPersistable
相同,不同之处在于该协议使用init?(persistedValue:)
而不是init(persistedValue:)
。FailableCustomPersistable 类型在非可选上下文中强制展开,并在可选上下文中折叠为
查看更多nil
。 也就是说,如果有一个无法转换为 URL 的值,则读取@Persisted var url: URL
属性将引发展开失败的异常,而从Persisted var url: URL?
读取将返回nil
。声明
Swift
public protocol FailableCustomPersistable : _CustomPersistable
-
在 Realm 事件中具有自定义表示形式的类型。
默认情况下,使用内置规则将对象序列化为 JSON,其中包括每个属性。 如果您希望自定义类在事件中的序列化方式,则可以将其声明为符合此协议并定义
查看更多customEventRepresentation()
。声明
Swift
@objc(RLMCustomEventRepresentable) public protocol CustomEventRepresentable
-
用于订阅
查看更多MongoCollection.watch()
流上的变更的委托。声明
Swift
public protocol ChangeEventDelegate : AnyObject
-
可以存储在 Realm 对象上的枚举类型。
只有 Int 支持的
@objc
枚举才能存储在 Realm 对象上,并且枚举类型必须显式符合此协议。 例如:@objc enum MyEnum: Int, RealmEnum { case first = 1 case second = 2 case third = 7 } class MyModel: Object { @objc dynamic enumProperty = MyEnum.first let optionalEnumProperty = RealmOptional<MyEnum>() }
声明
Swift
public protocol RealmEnum : RealmOptionalType, _RealmSchemaDiscoverable
-
一种协议,描述可参数化
RealmOptional
的类型。声明
Swift
public protocol RealmOptionalType : _ObjcBridgeable
-
一种枚举类型,可与 @Persisted 和 Realm collection一起使用。
在 Realm 中持久化枚举要求其具有原始值,并且该原始值采用 Realm 可以存储的类型。 枚举还必须显式标记为符合此协议,因为 Swift 不允许我们隐式这样做。
enum IntEnum: Int, PersistableEnum { case first = 1 case second = 2 case third = 7 } enum StringEnum: String, PersistableEnum { case first = "a" case second = "b" case third = "g" }
如果 Realm 包含的值不是有效的枚举成员(例如,如果该值是由对哪些值是有效值存在分歧的不同同步客户端写入的),可选枚举属性将返回
nil
,非可选属性将返回 。将中止该进程。声明
Swift
public protocol PersistableEnum : MinMaxType, RealmEnum, _PersistableInsideOptional, _RealmCollectionValueInsideOptional, CaseIterable, Comparable, RawRepresentable where Self.RawValue : Comparable
-
可建立索引的类型。
该协议只是一个标签,将其他类型声明为符合该协议只会导致运行时错误,而不是编译时错误。
声明
Swift
@_marker public protocol _Indexable
-
可作为对象主键的类型。
该协议只是一个标签,将其他类型声明为符合该协议只会导致运行时错误,而不是编译时错误。
声明
Swift
@_marker public protocol _PrimaryKey
-
声明
Swift
public protocol ProjectionObservable : AnyObject, ThreadConfined
-
所有数字类型的标记协议。
声明
Swift
public protocol _QueryNumeric : _RealmSchemaDiscoverable
-
与
String
兼容的所有类型的标记协议。声明
Swift
public protocol _QueryString : _QueryBinary
-
与
Binary
兼容的所有类型的标记协议。声明
Swift
public protocol _QueryBinary
-
可以从 Realm 获取的对象 — Realm 对象或投影
声明
Swift
public protocol RealmFetchable : RealmCollectionValue
-
可以存储在 Realm 列表、MutableSet、Map 或 Results 中的类型。
将其他类型声明为符合此协议并不会使它们真正起作用。 在 Realm 中存储值的大部分逻辑并未在 Swift 中实现,目前也没有扩展机制来支持更多类型。
声明
Swift
public protocol RealmCollectionValue : _HasPersistedType, Hashable where Self.PersistedType : RealmCollectionValue
-
一种协议,描述可参数化
RealmPropertyType
的类型。声明
Swift
public protocol RealmPropertyType : _ObjcBridgeable, _RealmSchemaDiscoverable
-
可与最小值和最大值 API 一起使用的属性类型。
看
min(ofProperty:)
,max(ofProperty:)
声明
Swift
@_marker public protocol MinMaxType
-
可与求和值 API 和平均值 API 一起使用的属性类型。
看
sum(ofProperty:)
,average(ofProperty:)
声明
Swift
@_marker public protocol AddableType
-
可直接排序或区分的属性类型。
看
sum(ascending:)
,distinct()
声明
Swift
@_marker public protocol SortableType
-
具有可排序或区分的属性的类型。
声明
Swift
@_marker public protocol KeypathSortable
-
查看更多RealmSectionedResult
定义了SectionedResults
和ResultSection
共有的属性和方法。声明
Swift
public protocol RealmSectionedResult : ThreadConfined, Equatable, RandomAccessCollection
-
可与 @ObservedResults 属性包装器一起使用的类型。 Realm 对象或投影的子类。 它旨在专门化 ObservedResults 的 init 方法。
声明
Swift
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) public protocol _ObservedResultsValue : RealmCollectionValue
-
符合
ThreadConfined
的类型的对象可以由 Realm 管理,这将使它们绑定到线程特定的Realm
实例。 托管对象必须显式导出和导入才能在线程之间传递。符合此协议的对象的托管实例可以传递给
ThreadSafeReference(to:)
构造函数,转换为线程安全的引用,以便在线程之间传输。请注意,只有 Realm 定义的类型才能有意义地符合此协议,并且定义尝试符合此协议的新类不会使它们与
查看更多ThreadSafeReference
一起使用。声明
Swift
public protocol ThreadConfined