У меня есть это представление, например: < /p>
struct MyChartView: View {
let chart: MyChart
@State private var selectedPoint: Int? = nil
var body: some View {
//... draw chart, set/move selectedPoint by a gesture ...
}
.onChange(of: chart) { selectedPoint = nil }
}
Как сбросить selectedpoint var Когда представление повторно повторно с помощью новой диаграммы и до того, как пройд рендеринговый проход? OnChange триггеры после первого прохода рендеринга, и это вызывает несоответствие, поскольку chart уже содержит новое значение, которое было передано в init () . Я не мог найти никаких подходов к разработке, и из того, что я пробовал, только этот взлом работает:
Введите состояние VAR для HASH и сравнивайте его каждый раз с новым хэшем в Render Pass. Если это не совпадает, пропустите рендеринг: < /p>
@State private var chartHash: Int
var body: some View {
let newChartHash = computeChartsHash(chart)
if newChartHash != self.chartHash {
return
}
...
Подробнее здесь: https://stackoverflow.com/questions/797 ... g-the-view