Когда .Вызывается модификатор средства выбора onChange

#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 сначала.