123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- import Realm
- public protocol ThreadConfined {
-
-
- var realm: Realm? { get }
-
- var isInvalidated: Bool { get }
-
- var isFrozen: Bool { get }
-
- func freeze() -> Self
- }
- public struct ThreadSafeReference<Confined: ThreadConfined> {
- private let swiftMetadata: Any?
-
- public var isInvalidated: Bool { return objectiveCReference.isInvalidated }
- private let objectiveCReference: RLMThreadSafeReference<RLMThreadConfined>
-
- public init(to threadConfined: Confined) {
- let bridged = (threadConfined as! AssistedObjectiveCBridgeable).bridged
- swiftMetadata = bridged.metadata
- objectiveCReference = RLMThreadSafeReference(threadConfined: bridged.objectiveCValue as! RLMThreadConfined)
- }
- internal func resolve(in realm: Realm) -> Confined? {
- guard let objectiveCValue = realm.rlmRealm.__resolve(objectiveCReference) else { return nil }
- return ((Confined.self as! AssistedObjectiveCBridgeable.Type).bridging(from: objectiveCValue, with: swiftMetadata) as! Confined)
- }
- }
- extension Realm {
-
-
- public func resolve<Confined>(_ reference: ThreadSafeReference<Confined>) -> Confined? {
- return reference.resolve(in: self)
- }
- }
|