32 lines
557 B
Swift
32 lines
557 B
Swift
import Combine
|
|
|
|
protocol ChangeObservableItem: ObservableObject {
|
|
|
|
var cancellables: Set<AnyCancellable> { 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)
|
|
}
|
|
}
|