Moves @Managed to AltStoreCore

This commit is contained in:
Riley Testut
2022-11-23 18:08:48 -06:00
committed by Magesh K
parent 2017584da4
commit 2a7926539f
2 changed files with 5 additions and 4 deletions

View File

@@ -0,0 +1,71 @@
//
// Managed.swift
// AltStore
//
// Created by Riley Testut on 10/5/20.
// Copyright © 2020 Riley Testut. All rights reserved.
//
import Foundation
import CoreData
@propertyWrapper @dynamicMemberLookup
struct Managed<ManagedObject>
struct Managed<ManagedObject>
{
public var wrappedValue: ManagedObject {
didSet {
self.managedObjectContext = self.managedObject?.managedObjectContext
self.managedObjectContext = self.managedObject?.managedObjectContext
}
}
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 = self.managedObject?.managedObjectContext
self.managedObjectContext = self.managedObject?.managedObjectContext
}
public subscript<T>(dynamicMember keyPath: KeyPath<ManagedObject, T>) -> T
{
var result: T!
if let context = self.managedObjectContext
{
context.performAndWait {
result = self.wrappedValue[keyPath: keyPath]
}
}
else
{
result = self.wrappedValue[keyPath: keyPath]
}
return result
}
// Optionals
subscript<Wrapped, T>(dynamicMember keyPath: KeyPath<Wrapped, T>) -> T? where ManagedObject == Optional<Wrapped> {
var result: T?
if let context = self.managedObjectContext {
context.performAndWait {
result = self.wrappedValue?[keyPath: keyPath] as? T
}
} else {
result = self.wrappedValue?[keyPath: keyPath] as? T
}
return result
}
}