mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
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:
@@ -10,23 +10,27 @@ import Foundation
|
|||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
@propertyWrapper @dynamicMemberLookup
|
@propertyWrapper @dynamicMemberLookup
|
||||||
struct Managed<ManagedObject: NSManagedObject>
|
struct Managed<ManagedObject>
|
||||||
{
|
{
|
||||||
var wrappedValue: ManagedObject {
|
var wrappedValue: ManagedObject {
|
||||||
didSet {
|
didSet {
|
||||||
self.managedObjectContext = self.wrappedValue.managedObjectContext
|
self.managedObjectContext = self.managedObject?.managedObjectContext
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private var managedObjectContext: NSManagedObjectContext?
|
|
||||||
|
|
||||||
var projectedValue: Managed<ManagedObject> {
|
var projectedValue: Managed<ManagedObject> {
|
||||||
return self
|
return self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var managedObjectContext: NSManagedObjectContext?
|
||||||
|
private var managedObject: NSManagedObject? {
|
||||||
|
return self.wrappedValue as? NSManagedObject
|
||||||
|
}
|
||||||
|
|
||||||
init(wrappedValue: ManagedObject)
|
init(wrappedValue: ManagedObject)
|
||||||
{
|
{
|
||||||
self.wrappedValue = wrappedValue
|
self.wrappedValue = wrappedValue
|
||||||
self.managedObjectContext = wrappedValue.managedObjectContext
|
self.managedObjectContext = self.managedObject?.managedObjectContext
|
||||||
}
|
}
|
||||||
|
|
||||||
subscript<T>(dynamicMember keyPath: KeyPath<ManagedObject, T>) -> T
|
subscript<T>(dynamicMember keyPath: KeyPath<ManagedObject, T>) -> T
|
||||||
|
|||||||
Reference in New Issue
Block a user