Skip to content

Instantly share code, notes, and snippets.

@Czajnikowski
Last active September 23, 2021 13:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Czajnikowski/4c7100f10fb3d8da22ee17bdbac00e9c to your computer and use it in GitHub Desktop.
Save Czajnikowski/4c7100f10fb3d8da22ee17bdbac00e9c to your computer and use it in GitHub Desktop.
Solution for propagating changes from nested ObservableObjects
class TrackViewModel {
private let nestedViewModel: PlaybackViewModel
private var propagation: Any?
init(nestedViewModel: PlaybackViewModel) {
self.nestedViewModel = nestedViewModel
propagation = nestedViewModel.propagateWeakly(to: self)
}
...
}
import Combine
extension ObservableObject {
public func propagateWeakly<InputObservableObject>(
to inputObservableObject: InputObservableObject
) -> AnyCancellable where
InputObservableObject: ObservableObject,
InputObservableObject.ObjectWillChangePublisher == ObservableObjectPublisher
{
objectWillChange.propagateWeakly(to: inputObservableObject)
}
}
extension Publisher where Failure == Never {
public func propagateWeakly<InputObservableObject>(
to inputObservableObject: InputObservableObject
) -> AnyCancellable where
InputObservableObject: ObservableObject,
InputObservableObject.ObjectWillChangePublisher == ObservableObjectPublisher
{
sink { [weak inputObservableObject] _ in
inputObservableObject?.objectWillChange.send()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment