EmbeddedObject

extension EmbeddedObject
extension EmbeddedObject: @retroactive ObservableObject
extension EmbeddedObject: _RealmCollectionValueInsideOptional
extension EmbeddedObject: ThreadConfined

初始化器

  • 创建 Realm 对象的非托管实例。

    value参数用于填充对象。 它可以是键值编码兼容对象、从NSJSONSerialization中的方法返回的数组或字典,或者是包含每个托管属性一个元素的Array 。 如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。

    传入Array作为value参数时,所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。

    可以通过将非托管嵌入式对象分配给托管对象的属性或将其添加到托管列表中来将其添加到 Realm 中。

    声明

    Swift

    public convenience init(value: Any)

    参数

    value

    用于填充对象的值。

属性

对象定制

  • 重写此方法以指定要忽略的属性的名称。 这些属性不会由托管该对象的 Realm 进行托管。

    警告

    此函数仅适用于使用@objc的旧版属性声明。使用@Persisted时,任何未标记为@Persisted的属性都将被自动忽略。

    声明

    Swift

    @objc
    open class func ignoredProperties() -> [String]

    返回值

    要忽略的属性名称数组。

  • 重写此方法以指定公有-私有属性名称的映射。 这将在 Realm 上设置不同的持久属性名称,并允许对该属性的任何操作使用公共名称。 (例如:查询、排序……)。 如果您需要将属性名称从Device Sync JSON schema映射到本地属性名称,这非常有帮助。

    class Person: EmbeddedObject {
        @Persisted var firstName: String
        @Persisted var birthDate: Date
        @Persisted var age: Int
    
        override class public func propertiesMapping() -> [String : String] {
            ["firstName": "first_name",
             "birthDate": "birth_date"]
        }
    }
    

    注意

    只有具有不同列名的属性才必须添加到属性映射字典中。

    声明

    Swift

    open override class func propertiesMapping() -> [String : String]

    返回值

    公有-私有属性名称的字典。

键值编码和下标

通知

  • 注册一个区块,以便在每次对象更改时调用。

    在每次写事务(write transaction)删除对象或修改对象的任何托管属性(包括将属性设置为其现有值的自分配)后,将异步调用该块。

    对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。

    通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。

    ListResults不同,添加新的通知块后,不会执行“初始”回调。

    只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用invalidate()

    在回调块中捕获对观察到的对象的强引用是安全的。 由于回调由返回的令牌而不是对象本身保留,因此不存在保留周期。

    警告

    在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。

    声明

    Swift

    public func observe<T: RLMObjectBase>(on queue: DispatchQueue? = nil,
                                          _ block: @escaping (ObjectChange<T>) -> Void) -> NotificationToken

    参数

    queue

    用于接收通知的串行调度队列。 如果为nil ,则通知将传递到当前线程。

    block

    要调用的区块,其中包含有关对象更改的信息。

    返回值

    只要您希望传递更新,就必须持有的令牌。

  • observe(keyPaths:on:_isolation:_:) 异步(Asynchronous)

    注册一个区块,以便在每次对象更改时调用。

    每次写事务(write transaction)后,将在给定 actor 的执行程序上异步调用该区块,这会删除对象或修改对象的任何托管属性,包括将属性设置为其现有值的自分配。该区块会向该区块传递与所请求 actor 隔离的对象副本,该副本以及有关更改内容的信息可安全地用于该 actor。

    对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。

    只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用invalidate()

    默认情况下,只有对对象属性的直接更改才会生成通知,对链接对象的更改不会。 请注意,这与集合更改通知不同。 如果传入了非零、非空的键路径数组,则只有对这些键路径标识的属性进行更改才会生成更改通知。 键路径可以遍历链接属性以接收有关链接对象的变更的信息。

    警告

    在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。

    声明

    Swift

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    public func observe<A: Actor, T: Object>(
        keyPaths: [String]? = nil, on actor: A, _isolation: isolated (any Actor)? = #isolation,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    参数

    actor

    要隔离通知的 actor。

    block

    要调用的区块,其中包含有关对象更改的信息。

    返回值

    只要您希望传递更新,就必须持有的令牌。

  • observe(keyPaths:on:_isolation:_:) 异步(Asynchronous)

    注册一个区块,以便在每次对象更改时调用。

    每次写事务(write transaction)后,将在给定 actor 的执行程序上异步调用该区块,这会删除对象或修改对象的任何托管属性,包括将属性设置为其现有值的自分配。该区块会向该区块传递与所请求 actor 隔离的对象副本,该副本以及有关更改内容的信息可安全地用于该 actor。

    对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。

    只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用invalidate()

    默认情况下,只有对对象属性的直接更改才会生成通知,对链接对象的更改不会。 请注意,这与集合更改通知不同。 如果传入了非零、非空的键路径数组,则只有对这些键路径标识的属性进行更改才会生成更改通知。 键路径可以遍历链接属性以接收有关链接对象的变更的信息。

    警告

    在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。

    声明

    Swift

    @available(macOS 10.15, tvOS 13.0, iOS 13.0, watchOS 6.0, *)
    public func observe<A: Actor, T: Object>(
        keyPaths: [PartialKeyPath<T>], on actor: A, _isolation: isolated (any Actor)? = #isolation,
        _ block: @Sendable @escaping (isolated A, ObjectChange<T>) -> Void
    ) async -> NotificationToken

    参数

    actor

    要隔离通知的 actor。

    block

    要调用的区块,其中包含有关对象更改的信息。

    返回值

    只要您希望传递更新,就必须持有的令牌。

对比

  • 返回两个 Realm 对象是否相同。

    当且仅当对象由同一个 Realm 托管并指向数据库中的同一个底层对象时,对象才被视为相同。

    注意

    相等比较由isEqual(_:)实施。 如果 Realm 对象类型是使用主键定义的,则isEqual(_:)的行为与此方法相同。如果未使用主键定义 Realm 对象类型,则isEqual(_:)将使用比较对象身份的NSObject行为。此方法可用于比较两个对象在数据库中的相等性,无论它们的Realm 对象类型是否定义了主键。

    声明

    Swift

    public func isSameObject(as object: EmbeddedObject?) -> Bool

    参数

    object

    与接收器进行比较的对象。

  • 指示此对象是否已冻结。

    声明

    Swift

    public var isFrozen: Bool { get }
  • 返回此对象的冻结(不可变)快照。

    冻结副本是一个不可变对象,其中包含与该对象当前包含的数据相同的数据,但在写入包含的 Realm 时不会更新。 与活动对象不同,冻结对象可以从任何线程访问。

    警告

    在 Realm 上执行写事务(write transaction)时长时间持有冻结对象可能会导致 Realm 文件变大。有关更多信息,请参阅Realm.Configuration.maximumNumberOfActiveVersions

    警告

    此方法只能在托管对象上调用。

    声明

    Swift

    public func freeze() -> Self
  • 返回此对象的实时(可变)引用。

    此方法为同一冻结对象的实时副本创建托管访问器。 如果在已经存在的对象上调用,则会返回 self。

    声明

    Swift

    public func thaw() -> `Self`?