EmbeddedObject
@objc(RealmSwiftEmbeddedObject)
open class EmbeddedObject : RLMObjectBase, RealmCollectionValue
extension EmbeddedObject: ThreadConfined
EmbeddedObject
是用于定义嵌入式 Realm 模型对象的基类。
嵌入式对象的工作方式与普通对象类似,但由单个父对象(其本身可能是嵌入式对象)拥有。 与普通的顶级对象不同,嵌入式对象不能直接在 Realm 中创建或添加到 Realm 中。 相反,它们只能作为父对象的一部分创建,或者通过将非托管对象分配给父对象的属性来创建。 当父对象被删除或父对象被修改为不再指向嵌入式对象时(通过重新分配对象属性或从包含它的列表中删除嵌入式对象),嵌入式对象会自动删除。
嵌入式对象只能有一个链接到它们的父对象,尝试链接到现有的托管嵌入式对象会引发异常。
EmbeddedObject
支持的属性类型与Object
相同,不同之处在于嵌入式对象无法链接到顶级对象,因此不支持Object
和List<Object>
属性( EmbeddedObject
和List<EmbeddedObject>
是)。
嵌入式对象不能具有主键或索引属性。
class Owner: Object {
@objc dynamic var name: String = ""
let dogs = List<Dog>()
}
class Dog: EmbeddedObject {
@objc dynamic var name: String = ""
@objc dynamic var adopted: Bool = false
let owner = LinkingObjects(fromType: Owner.self, property: "dogs")
}
-
创建 Realm 对象的非托管实例。
可以通过将非托管嵌入式对象分配给托管对象的属性或将其添加到托管列表中来将其添加到 Realm 中。
声明
Swift
public override required init()
-
创建 Realm 对象的非托管实例。
value
参数用于填充对象。 它可以是键值编码兼容对象、从NSJSONSerialization
中的方法返回的数组或字典,或者是包含每个托管属性一个元素的Array
。 如果任何必需属性不存在且未为这些属性定义默认值,则会引发异常。传入
Array
作为value
参数时,所有属性都必须存在、有效,并且顺序与模型中定义的属性相同。可以通过将非托管嵌入式对象分配给托管对象的属性或将其添加到托管列表中来将其添加到 Realm 中。
声明
Swift
public convenience init(value: Any)
参数
value
用于填充对象的值。
-
托管对象的 Realm,如果对象为非托管对象,则为
nil
。声明
Swift
public var realm: Realm? { get }
-
列出对象的托管属性的对象模式。
声明
Swift
public var objectSchema: ObjectSchema { get }
-
指示对象是否因现已无效而无法再访问。
如果对象已从托管它的 Realm 中删除,或者对该 Realm 调用了
invalidate()
,则无法再访问该对象。声明
Swift
public override final var isInvalidated: Bool { get }
-
对象的人类可读描述。
声明
Swift
open override var description: String { get }
-
重写此方法以指定要忽略的属性的名称。 这些属性不会由托管该对象的 Realm 进行托管。
声明
Swift
@objc open class func ignoredProperties() -> [String]
返回值
要忽略的属性名称数组。
-
返回或设置具有给定名称的属性的值。
声明
Swift
@objc open subscript(key: String) -> Any? { get set }
-
注册一个区块,以便在每次对象更改时调用。
在每次写事务(write transaction)删除对象或修改对象的任何托管属性(包括将属性设置为其现有值的自分配)后,将异步调用该块。
对于在不同线程或不同进程中执行的写事务(write transaction),当管理 Realm(自动)刷新到包含更改的版本时,将调用该区块,而对于本地写事务(write transaction),将在提交写事务(write transaction)后的未来某个时间点调用该区块。
通知是通过标准事件循环传递的,因此当事件循环被其他活动阻止时无法传递。当无法立即传递通知时,可以将多个通知合并为一个通知。
与
List
和Results
不同,添加新的通知块后,不会执行“初始”回调。只有由 Realm 托管的对象才能以这种方式进行观察。只要您希望将更新发送到区块,就必须保留返回的令牌。 要停止接收更新,请对令牌调用
invalidate()
。在回调块中捕获对观察到的对象的强引用是安全的。 由于回调由返回的令牌而不是对象本身保留,因此不存在保留周期。
警告
在写事务(write transaction)期间或当包含的 Realm 为只读时,无法调用此方法。声明
Swift
public func observe<T: RLMObjectBase>(on queue: DispatchQueue? = nil, _ block: @escaping (ObjectChange<T>) -> Void) -> NotificationToken
参数
queue
用于接收通知的串行调度队列。 如果为
nil
,则通知将传递到当前线程。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