SwiftUI несколько раз не обновляет @EnvironmentObject

#swift #swiftui

#swift #swiftui

Вопрос:

В этом примере я пытаюсь сохранить состояние @EnvironmentObject и передать его DepthButtonView , но моя проблема в том, что иногда он пропускает settings.tradeChartType обновление DepthButtonView . это ошибка или я делаю что-то не так?

PS Я знаю @State свойство, просто мне нужна такая настройка в моем проекте

Любые рекомендации будут оценены

 struct BodyView: View {
    
    var hideAction: () -> Void
    var fullScreenAction: () -> Void
    var chartTypeAction: (TradeChartView.ChartType) -> Void
    
    @EnvironmentObject var settings: AppSettings
    
    var body: some View {
        Group {
            Button(action: {
                
                if settings.tradeChartType == .trading {
                    settings.tradeChartType = .depth
                    
                } else {
                    settings.tradeChartType = .trading
                    
                }
                
                chartTypeAction(settings.tradeChartType)
            }, label: {
                DepthButtonView(tradeChartType: $settings.tradeChartType)
            })
            Spacer()
            Button(action: {
                fullScreenAction()
            }, label: {
                Image("HeaderTradeChartZoom")
            })
            if !settings.tradeChertFullScreen {
                Button(action: {
                    hideAction()
                }, label: {
                    Image("HeaderTradeChartHide")
                })
            }
        }
    }
    struct DepthButtonView: View {
        @Binding var tradeChartType: TradeChartView.ChartType
        
        var body: some View {
            Group {
                Text(LocalString(tradeChartType == .trading ? "cis.retail.ios.header.depth.button" : "cis.retail.ios.header.trading.button"))
                    .customFont(name: .ubuntuMedium, size: 16)
                    .foregroundColor(Color.primaryBlue).fixedSize()
                Image("HeaderLeftBlueArrow")
            }
        }
    }
}
  

Ответ №1:

Я не вижу причин для привязки здесь, поэтому попробуйте использовать напрямую, например

 DepthButtonView(tradeChartType: settings.tradeChartType)
  

и

 struct DepthButtonView: View {
    var tradeChartType: TradeChartView.ChartType
    
    var body: some View {
        // .. other code
  

Примечание: я предполагаю tradeChartType @Published , что в AppSettings