#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