I'm looking at use case where I'd need to publish changes to subscribers when an ObservableObject property that is delegated(*) changes, as follows:
struct ContentView: View {
@EnvironmentObject var foobar: Foobar
var body: some View {
VStack {
Text("localProp1 is \(String(format: "%.2f", self.foobar.someInstance.prop1))")
Slider(value: self.$foobar.someInstance.prop1)
}
}
}
class Foobar: ObservableObject {
var someInstance: SomeInstance = SomeInstance()
}
I don't have control over SomeInstance, this is a third-party library and I would have to use the @Published keyword before the property so that can store and publish their changes to the subscriber, correct?
(*)I hope I explain this well, is my understanding that a Delegate is an instance of an object assigned to an object property, correct me otherwise
I don't think that's correct. The word delegate is used with a certain design pattern. It's common in UIKit and some other Apple libraries. A typical example is UITableView and UITableViewDelegate. You implement the delegate and connect it to the table view as a way to customize that table view. The table view will call its delegate for various things.
For what you have, I'd call that simply an object with a reference to another object.
I don't think there is a way to do what you want with @Published. You might have to manually wire it up...
class Foobar: ObservableObject {
var someInstance = SomeInstance()
init() {
someInstance.onSomeEvent { _ in
self.objectWillChange.send()
}
}
}