配置

@frozen
public struct Configuration : Sendable
extension Realm.Configuration: CustomStringConvertible
extension Realm.Configuration: Equatable

Configuration实例描述了用于创建 Realm 实例的不同选项。

Configuration 实例只是普通的 Swift 结构体。 与RealmObject不同,只要不改变它们,就可以在线程之间自由共享。

为类子集创建配置值(通过设置objectClasses属性)的成本可能很高。 因此,您通常希望为每个不同的配置缓存并重复使用单个配置值,而不是在每次打开 Realm 时都创建一个新值。

默认配置

  • 未显式指定配置时用于创建 Realm 的默认Configuration (即 Realm() )

    声明

    迅速

    public static var defaultConfiguration: Configuration { get set }

初始化

  • 创建一个可用于创建新的Realm实例的Configuration

    注意

    fileURLinMemoryIdentifier参数是互斥的。仅设置其中之一,如果要使用默认文件 URL,则不设置。

    声明

    迅速

    @preconcurrency
    public init(fileURL: URL? = URL(fileURLWithPath: RLMRealmPathForFile("default.realm"), isDirectory: false),
                inMemoryIdentifier: String? = nil,
                encryptionKey: Data? = nil,
                readOnly: Bool = false,
                schemaVersion: UInt64 = 0,
                migrationBlock: MigrationBlock? = nil,
                deleteRealmIfMigrationNeeded: Bool = false,
                shouldCompactOnLaunch: (@Sendable (Int, Int) -> Bool)? = nil,
                objectTypes: [ObjectBase.Type]? = nil,
                seedFilePath: URL? = nil)

    参数

    fileURL

    Realm 文件的本地 URL。

    inMemoryIdentifier

    用于标识特定内存中 Realm 的字符串。

    encryptionKey

    用于加密数据的可选 64 字节密钥。

    readOnly

    Realm 是否为只读(对于只读文件必须为 true)。

    schemaVersion

    当前模式版本。

    migrationBlock

    将 Realm 迁移到当前版本的区块。

    deleteRealmIfMigrationNeeded

    如果true ,则在需要迁移时使用提供的模式重新创建 Realm 文件。

    shouldCompactOnLaunch

    在进程生命周期中首次打开 Realm 时调用的区块,用于确定是否应在将其返回给用户之前对其进行压缩。 系统会向其传递总文件大小(数据 + 可用空间)以及文件中数据使用的总字节数。

                               Return `true ` to indicate that an attempt to compact the file should be made.
                               The compaction will be skipped if another process is accessing it.
    
    objectTypes

    ObjectEmbeddedObject子类的子集保留在 Realm 中。

    seedFilePath

    Realm 文件的路径,首次打开时将复制到 fileURL。

配置属性

  • Realm 文件的本地 URL。 与inMemoryIdentifier互斥。

    声明

    迅速

    public var fileURL: URL? { get set }
  • 用于标识特定内存中 Realm 的字符串。 与fileURL互斥。

    声明

    迅速

    public var inMemoryIdentifier: String? { get set }
  • 用于加密数据的 64 字节密钥;如果未启用加密,则为nil

    声明

    迅速

    public var encryptionKey: Data?
  • 是否以只读模式打开 Realm。

    这是打开不可写入或位于不可写入目录中的 Realm 文件所必需的。这只应用于在打开时不会被任何人修改的文件,而不仅仅是获取可能被其他线程或进程写入的文件的只读视图。以只读模式打开需要禁用 Realm 的读取器/写入器协调,因此从另一个进程提交写事务会导致崩溃。

    声明

    迅速

    public var readOnly: Bool
  • 当前模式版本。

    声明

    迅速

    public var schemaVersion: UInt64
  • 将 Realm 迁移到当前版本的区块。

    声明

    迅速

    @preconcurrency
    public var migrationBlock: MigrationBlock?
  • 如果需要迁移,是否使用提供的模式重新创建 Realm 文件。 当存储的模式与提供的模式不同,或者存储的模式版本与此配置上的版本不同时,就会出现这种情况。 如果需要或执行迁移,则将此属性设置为true会删除该文件。

    注意

    将此属性设置为true不会禁用文件格式迁移。

    声明

    迅速

    public var deleteRealmIfMigrationNeeded: Bool
  • 在进程生命周期中首次打开 Realm 时调用的区块,用于确定是否应在将其返回给用户之前对其进行压缩。 系统会向其传递总文件大小(数据 + 可用空间)以及文件中数据使用的总字节数。

    返回true表示应尝试压缩文件。 如果另一个进程正在访问它,则将跳过压实。

    声明

    迅速

    @preconcurrency
    public var shouldCompactOnLaunch: (@Sendable (Int, Int) -> Bool)?
  • Realm 托管的类。

    声明

    迅速

    public var objectTypes: [ObjectBase.Type]? { get set }
  • 尝试启动写事务(write transaction)时,在引发异常之前,Realm 文件中活动版本的最大数量。

    Realm 提供 MVCC 快照隔离,这意味着一个线程上的写入不会覆盖另一线程上正在读取的数据,而是写入该数据的新副本。当 Realm 刷新时,它会更新到最新版本的数据并释放旧版本,从而允许它们被后续写事务(write transaction)覆盖。

    在正常情况下,这不是问题,但如果活动版本的数量过多,则会对磁盘上的文件大小产生负面影响。 当同时在多个不同线程上执行写入时、长时间持有冻结对象时或在不允许 Realm 刷新的背景线程上执行长时间操作时,都可能会发生这种情况。

    将此属性设置为非零值,超过设定的版本数则会引发异常。 可以在开发期间使用较低的值,以帮助识别可能有问题的地方,或者在生产使用中导致应用程序崩溃,而不是生成太大而无法打开的 Realm 文件。

    声明

    迅速

    public var maximumNumberOfActiveVersions: UInt?
  • 首次打开 Realm 时,不会创建空文件,而是从提供的种子文件路径复制并使用 Realm 文件。 这可用于打开预填充数据的 Realm 文件。

    如果配置的目标路径中已存在 Realm 文件,则不会复制种子文件,而是会打开已存在的 Realm。

    此选项与inMemoryIdentifier互斥。 设置seedFilePath会将inMemoryIdentifier

    声明

    迅速

    public var seedFilePath: URL?

CustomStringConvertible

Equatable