ThreadConfined
public protocol ThreadConfined
符合ThreadConfined
的类型的对象可以由 Realm 管理,这将使它们绑定到线程特定的Realm
实例。 托管对象必须显式导出和导入才能在线程之间传递。
符合此协议的对象的托管实例可以传递给ThreadSafeReference(to:)
构造函数,转换为线程安全的引用,以便在线程之间传输。
请注意,只有 Realm 定义的类型才能有意义地符合此协议,并且定义尝试符合此协议的新类不会使它们与ThreadSafeReference
一起使用。
-
托管对象的 Realm,如果对象为非托管对象,则为
nil
。非托管对象不仅限于线程,也不能传递给需要
ThreadConfined
对象的方法。声明
Swift
var realm: Realm? { get }
-
指示对象是否因现已无效而无法再访问。
声明
Swift
var isInvalidated: Bool { get }
-
指示对象是否已冻结。
冻结对象不限于其源线程。 允许为冻结对象形成
ThreadSafeReference
,但不太可能有用。声明
Swift
var isFrozen: Bool { get }
-
返回此对象的冻结快照。
与普通 Realm 对象不同,冻结副本可以从任何线程读取,并且读取的值永远不会更新以反映对 Realm 的新写入。可以像查询任何其他 Realm collection一样查询冻结collection。冻结对象无法更改,也无法观察到变更通知。
非托管 Realm 对象无法被冻结。
警告
在 Realm 上执行写事务(write transaction)时长时间持有冻结对象可能会导致 Realm 文件变大。有关更多信息,请参阅Realm.Configuration.maximumNumberOfActiveVersions
。声明
Swift
func freeze() -> Self
-
返回此对象的实时(可变)引用。 如果在已经存在的对象上调用,则会返回 self。
声明
Swift
func thaw() -> Self?
-
bind(_:
扩展方法) 为给定属性创建
Binding
,允许在幕后自动进行事务处理读取和写入。对于需要传入
Binding
的 SwiftUI 视图(例如,TextField、DatePicker),这是一种便捷方法。 SwiftUI 将自动从绑定中读取/写入。声明
Swift
@MainActor public func bind<V>(_ keyPath: ReferenceWritableKeyPath<Self, V>) -> Binding<V> where V : _Persistable, V : Equatable
-
bind(_:
扩展方法) 为给定属性创建
Binding
,允许在幕后自动进行事务处理读取和写入。对于需要传入
Binding
的 SwiftUI 视图(例如,TextField、DatePicker),这是一种便捷方法。 SwiftUI 将自动从绑定中读取/写入。声明
Swift
@MainActor public func bind<V>(_ keyPath: ReferenceWritableKeyPath<Self, V>) -> Binding<V> where V : _Persistable, V : Equatable