@ObservedObject
The @ObservedObject property wrapper is another one that SwiftUI provides us. We use this wrapper in conjunction with the ObservableObject protocol. We remember that we use the ObservableObject protocol when we want to observe a class. So if we use the @ObservedObject property wrapper in a view and the object changes, our view and our @ObservedObject will be reloaded.
An example implementation could look like this:


Our Cars class uses the @Published wrapper, which means that changes are automatically sent whenever the brands property changes. Our ContentView gets these changes because we use the @ObservedObject property wrapper. Without this wrapper, the changes would be sent but ignored, because there is no trigger that would cause a reload of the View. Basically, we can say that @ObservedObject is our trigger to reload the View.
The following example can be tried with @ObservedObject as well as without. Both would work, but only @ObservedObject Property changes would be visible.


A crucial tip towards the end is that we should only use @ObservableObject if we have multiple views that pass on an object through multiple views. The first view and its first instance should always use the @StateObject property wrapper. This is specifically for providing proper management of the object’s lifecycle. You will learn why this is in the @StateObject article.
@ObservedObject
Einen weiteren Property Wrapper den uns SwiftUI bereitstellt ist der @ObservedObject Wrapper. Wir benutzen diesen Wrapper im Zusammenhang mit dem ObservableObject Protocol. Wir erinnern uns, dass wir das ObservableObject Protocol verwenden, wenn wir eine Klasse beobachten (observen) wollen. Wenn wir also den @ObservedObject Property Wrapper in einer View verwenden und sich das Objekt ändert, wird unsere View neu geladen und unser Object neu geladen.
Eine Beispiel Implementation könnte wie folgt aussehen:


Unsere Cars Klasse benutzt den Wrapper @Published. Dies bedeutet, dass automatisch Änderungen gesendet werden, sobald sich die Propertie brands ändert. Diese Änderungen bekommt unsere ContentView mit, da wir den @ObservedObject Property Wrapper verwenden. Ohne diesen Wrapper würden die Änderungen zwar gesendet werden, aber würden ignoriert werden, da es keinen Trigger gibt, der ein Reload der View auslösen würde.
Das folgende Beispiel kann mit @ObservedObject sowie ohne ausprobiert werden. Beides würde funktionieren, wobei nur bei der @ObservedObject Property Änderungen zu sehen sind.


Ein wichtiger Tipp zum Ende hin ist, dass wir @ObservableObject nur dann verwenden sollten, wenn wir mehrere Views haben, die ein Objekt über mehrere Views weitergeben. Die Erste View und dessen erste Instanz sollte immer den @StateObejct Property Wrapper verwenden. Dieser ist extra dafür da. Weshalb das so ist, erfahrt ihr in dem Artikel @StateObject.
