22.6 Summary
SwiftUI provides three ways to bind data to the user interface and logic of an app. State properties are used to store the state of the views in a user interface layout and are local to the current content view. These transient values are lost when the view goes away.
For data that is external to the user interface and is required only by a subset of the SwiftUI view structures in an app, the observable object protocol should be used. Using this approach, the class or structure which represents the data must conform to the ObservableObject protocol and any properties to which views will bind must be declared using the @Published property wrapper. To bind to an observable object property in a view declaration the property must use the @ObservedObject or @StateObject property wrapper (@StateObject being the preferred option in the majority of cases).
For data that is external to the user interface, but for which access is required for many views, the environment object...