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 objectIDs = Set() if let inserted = userInfo[NSInsertedObjectsKey] as? Set { objectIDs.formUnion(inserted.map(\.objectID)) } if let updated = userInfo[NSUpdatedObjectsKey] as? Set { objectIDs.formUnion(updated.map(\.objectID)) } if let deleted = userInfo[NSDeletedObjectsKey] as? Set { objectIDs.formUnion(deleted.map(\.objectID)) } return objectIDs } } extension Publisher where Output == Set { func filterByEntityName(_ name: String) -> some Publisher { filter { objectIDs in objectIDs.contains { objectID in objectID.entity.name == name } } } }