import Combine import CoreData import Foundation func changedObjectsOnManagedObjectContextDidSavePublisher() -> some Publisher, Never> { Foundation.NotificationCenter.default .publisher(for: NSNotification.Name.NSManagedObjectContextDidSave) .map { notification in guard let userInfo = notification.userInfo else { return Set() } var objects = Set((userInfo[NSInsertedObjectsKey] as? Set) ?? []) objects.formUnion((userInfo[NSUpdatedObjectsKey] as? Set) ?? []) objects.formUnion((userInfo[NSDeletedObjectsKey] as? Set) ?? []) return objects } } extension Publisher where Output == Set { func filterByEntityName(_ name: String) -> some Publisher { filter { objects in objects.contains(where: { $0.entity.name == name }) } } }