协议

以下协议在全球范围内可用。

可识别

  • 为 Realm 对象定义默认身份的协议

    将 Object 子类声明为符合此协议将为Identifiableid提供默认实现,该实现适用于 Realm 对象:

    // Automatically conforms to `Identifiable`
    class MyObjectType: Object, ObjectKeyIdentifiable {
        // ...
    }
    

    如果您愿意,也可以手动遵守Identifiable ,但请注意,使用对象的内存地址不适用于托管对象。

    查看更多

    声明

    迅速

    @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
    public protocol ObjectKeyIdentifiable : Identifiable

合并

  • 可传递给valuePublisher()changesetPublisher()的类型。

    声明

    迅速

    @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
    public protocol RealmSubscribable

RealmCollection 协议

公共 API

  • 一种可以与 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"

    查看更多

    声明

    迅速

    public protocol CustomPersistable : _CustomPersistable
  • 一种可以与 Realm 支持的类型相互映射的类型。

    此协议与CustomPersistable相同,不同之处在于该协议使用init?(persistedValue:)而不是init(persistedValue:)

    FailableCustomPersistable 类型在非可选上下文中强制展开,并在可选上下文中折叠为nil 。 也就是说,如果有一个无法转换为 URL 的值,则读取@Persisted var url: URL属性将引发展开失败的异常,而从Persisted var url: URL?读取将返回nil

    查看更多

    声明

    迅速

    public protocol FailableCustomPersistable : _CustomPersistable
  • 可以存储在 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>()
    }
    

    声明

    迅速

    public protocol RealmEnum : RealmOptionalType, _RealmSchemaDiscoverable
  • 一种协议,描述可参数化RealmOptional的类型。

    声明

    迅速

    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 ,非可选属性将返回 。将中止该进程。

    声明

    迅速

    public protocol PersistableEnum : MinMaxType, RealmEnum, _PersistableInsideOptional, _RealmCollectionValueInsideOptional, CaseIterable, Comparable, RawRepresentable where Self.RawValue : Comparable
  • 可建立索引的类型。

    该协议只是一个标签,将其他类型声明为符合该协议只会导致运行时错误,而不是编译时错误。

    声明

    迅速

    @_marker
    public protocol _Indexable
  • 可作为对象主键的类型。

    该协议只是一个标签,将其他类型声明为符合该协议只会导致运行时错误,而不是编译时错误。

    声明

    迅速

    @_marker
    public protocol _PrimaryKey

ProjectionObservable

Keypath 集合聚合

通知

  • 可以从 Realm 获取的对象 — Realm 对象或投影

    声明

    迅速

    public protocol RealmFetchable : RealmCollectionValue
  • 可以存储在 Realm 列表、MutableSet、Map 或 Results 中的类型。

    将其他类型声明为符合此协议并不会使它们真正起作用。 在 Realm 中存储值的大部分逻辑并未在 Swift 中实现,目前也没有扩展机制来支持更多类型。

    声明

    迅速

    public protocol RealmCollectionValue : _HasPersistedType, Hashable where Self.PersistedType : RealmCollectionValue
  • 一种协议,描述可参数化RealmPropertyType的类型。

    声明

    迅速

    public protocol RealmPropertyType : _ObjcBridgeable, _RealmSchemaDiscoverable

MinMaxType

  • 可与最小值和最大值 API 一起使用的属性类型。

    min(ofProperty:)max(ofProperty:)

    声明

    迅速

    @_marker
    public protocol MinMaxType

AddableType

ObservedResults

  • 可与 @ObservedResults 属性包装器一起使用的类型。 Realm 对象或投影的子类。 它旨在专门化 ObservedResults 的 init 方法。

    声明

    迅速

    @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
    public protocol _ObservedResultsValue : RealmCollectionValue
  • 符合ThreadConfined的类型的对象可以由 Realm 管理,这将使它们绑定到线程特定的Realm实例。 托管对象必须显式导出和导入才能在线程之间传递。

    符合此协议的对象的托管实例可以传递给ThreadSafeReference(to:)构造函数,转换为线程安全的引用,以便在线程之间传输。

    请注意,只有 Realm 定义的类型才能有意义地符合此协议,并且定义尝试符合此协议的新类不会使它们与ThreadSafeReference一起使用。

    查看更多

    声明

    迅速

    public protocol ThreadConfined