Supports non-NSManagedObjects for @Managed properties

This allows us to use @Managed with properties that may or may not be NSManagedObjects at runtime (e.g. protocols). If they are, Managed will keep strong reference to context like before.
This commit is contained in:
Riley Testut
2022-11-15 16:50:12 -06:00
parent 701065b073
commit b181b2e7a4

View File

@@ -10,23 +10,27 @@ import Foundation
import CoreData
@propertyWrapper @dynamicMemberLookup
struct Managed<ManagedObject: NSManagedObject>
struct Managed<ManagedObject>
{
var wrappedValue: ManagedObject {
didSet {
self.managedObjectContext = self.wrappedValue.managedObjectContext
self.managedObjectContext = self.managedObject?.managedObjectContext
}
}
private var managedObjectContext: NSManagedObjectContext?
var projectedValue: Managed<ManagedObject> {
return self
}
private var managedObjectContext: NSManagedObjectContext?
private var managedObject: NSManagedObject? {
return self.wrappedValue as? NSManagedObject
}
init(wrappedValue: ManagedObject)
{
self.wrappedValue = wrappedValue
self.managedObjectContext = wrappedValue.managedObjectContext
self.managedObjectContext = self.managedObject?.managedObjectContext
}
subscript<T>(dynamicMember keyPath: KeyPath<ManagedObject, T>) -> T