Какова цель @EnvironmentObject, когда у нас есть оболочка свойства @Binding? Мне трудно понять, зачем нужен @EnvironmentObject. Я просмотрел эти публикации, но это не совсем то, что я ищу EnvironmentObject в SwiftUIКак использовать BindableObjects (EnviromentObject)?
Я также просмотрел их документацию, которая была слишком тонкой. https://developer.apple.com/documentation/swiftui/environmentobject





Попробую объяснить в общих чертах. У нас есть @State, @ObservedObject, @EnvironmentObject и @Binding.
@State - объявляет свойство локального значения. Apple рекомендует использовать их как можно реже, потому что свойство @State должно использоваться только внутри представления и отвечать за мелкие UI вещи.@ObservedObject — свойство внешней ссылки. На самом деле это ваша модель данных, которая должна отображаться.@EnvironmentObject — то же, что и @ObservedObject, но используется через окружение для других представлений, тогда как @ObservedObject должен передаваться явно@Binding - определяет, что свойство не является Источник Истины и является только ссылкой на настоящий Источник Истины (@State, @ObservedObject, @EnvironmentObject). Передача одного из свойств с 1-3 точек в представление просмотра должна объявить свойство в дочернем представлении как @Binding, чтобы создать ссылку и передать свойство со знаком $, например MessageDetails(message: $message)
Для получения дополнительной информации рекомендуем посмотреть Поток данных через SwiftUIУПД:
Решил добавить немного важной информации из этой сессии. Вы можете использовать @ObservedObject и @Binding в своих представлениях, но в этом случае вам нужно будет передать привязываемый объект через все ваши представления в нужное представление. @EnvironmentObject и @Environment позволяют передавать привязываемый объект конкретному представлению в иерархии представлений, не передавая объект каждому представлению. На данный момент я не нашел реальных примеров от Apple, поэтому проверяю их сессии
Дополнительно: state обычно является приватным. Как внутреннее состояние просмотра, например. shouldShowView. Для ObservedObject подумайте о состоянии, но о чем-то, что его значение исходит извне вашего объекта и, возможно, о том, что представление также может обновлять значение модели, т.е. это двустороннее. Для EnvironmentObject см. переменные общий, это очень близко к синглтонам. В конечном счете, подумайте о Binding как о чем-то, что является проходом. Не уверен, что это хороший пример, но слабые ссылки никогда не сохраняют память, точно так же Binding не является причиной изменений, а только передает их дальше.
EnvironmentObjectупоминается в 26:45, хотя я рекомендую посмотреть все выступление.