#swift #swiftui #onchange
#swift #swiftui #onchange
Вопрос:
У меня есть следующее Picker
в моем SwiftUI ContentView
:
Picker("", selection: $approxType, content: {
Text("Linear").tag(1)
Text("Quadratic").tag(2)
Text("Exponential").tag(3)
})
.pickerStyle(SegmentedPickerStyle())
.frame(width: 300, alignment: .leading)
.onChange(of: approxType, perform: { value in
calculated = false
})
и мне интересно, когда onChange
выполняется модификатор. Ну, кажется, что сначала обновляется contentView и только затем выполняется закрытие onChange. Что мне нужно, так это убедиться, что для параметра @State var calculated
установлено значение false
до обновления contentView. Я ценю любой намек.
Комментарии:
1. Изменение выбора средства выбора не должно приводить к принудительному обновлению всего вашего contentView. Я бы предположил, что есть проблема с тем, как «вычисляемый» связан с чем-то другим, на ваш взгляд? Если вы помещаете test этот код отдельно, он выполняется правильно.
2. Вы не должны полагаться на порядок измененных состояний — реагируйте только на них.
3. Я не думаю, что полностью понимаю вопрос, но, возможно, вы ищете
.onAppear
Ответ №1:
Что мне нужно, так это убедиться, что для параметра @State var «вычисляется» установлено значение false до обновления contentView
Вы можете просто установить для него значение false при его инициализации:
@State private var calculated = false
Однако, если вы хотите такое же поведение, как onChange
и при первом обновлении вашего представления, вы можете использовать onReceive
вместо onChange
:
.onReceive(Just(approxType)) { approxType in
calculated = false
}
Примечание: для Just
работы вам нужно import Combine
сначала.