import Combine protocol ChangeObservableItem: ObservableObject { var cancellables: Set { get set } func needsSaving() } protocol ObservableContentItem: ChangeObservableItem { var content: Content { get } } extension ObservableContentItem { func needsSaving() { content.needsSave() } } extension ChangeObservableItem { func observeChanges() { objectWillChange .sink { [weak self] _ in self?.needsSaving() } .store(in: &cancellables) } }