Skip to content

Instantly share code, notes, and snippets.

@SwiftyAlex
Created March 13, 2020 20:31
Show Gist options
  • Save SwiftyAlex/e5fb211f016630977f3fab64c9fd88ca to your computer and use it in GitHub Desktop.
Save SwiftyAlex/e5fb211f016630977f3fab64c9fd88ca to your computer and use it in GitHub Desktop.
import CoreData
@propertyWrapper
class Fetched<Object: NSManagedObject>: NSObject, NSFetchedResultsControllerDelegate {
private var _fetchedResultsController: NSFetchedResultsController<Object>?
var wrappedValue: [Object] = []
init(context: NSManagedObjectContext = CoreDataService.context, sortDescriptiors: [NSSortDescriptor] = [], predicate: NSPredicate? = nil) {
super.init()
// Setup a fetch request
let fetchRequest = NSFetchRequest<Object>(entityName: Object.entity().name!)
fetchRequest.sortDescriptors = sortDescriptiors
fetchRequest.predicate = predicate
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
// Perform an initial fetch
try? fetchedResultsController.performFetch()
self.wrappedValue = fetchedResultsController.fetchedObjects ?? []
// Store the fetched results controller
self._fetchedResultsController = fetchedResultsController
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
self.wrappedValue = controller.fetchedObjects as? [Object] ?? []
}
}
// Usage
@Fetched()
var coffees: [Coffee]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment