I'm trying to understand the best approach for handling state with you have an object that contains other observable objects.
For instance, say your main model has an array of other observable objects. Is this the correct approach to have everything update when changes are made in a subview? I feel like this should be done through bindings, but I can't get it to work like that.
class Message: Identifiable, ObservableObject {
var id = UUID()
@Published var text: String
init(text: String) {
self.text = text
}
}
class Messenger: ObservableObject {
@Published var messages: [Message] = []
}
struct MessageView: View {
@StateObject var message: Message
var body: some View {
Button {
message.text = "New Message!"
} label: {
Text(message.text)
}
}
}
struct ContentView: View {
@StateObject var messenger = Messenger()
var body: some View {
VStack {
Button {
messenger.messages += [Message(text: "Hello!")]
} label: {
Text("Send Message")
.font(.headline)
}
ForEach(messenger.messages) { message in
MessageView(message: message)
}
}
}
}