У меня есть Пикер стиля SegmentedPickerStyle()
. Сейчас я делаю некоторые расчеты на основе значения выбора, и это работает. Но почему-то мой сборщик не меняет своего значения выбора, если я нажму на него. Для изменения значения выбора, мне нужно провести по значениям.
Другая проблема заключается в том, что если мне нужно вычислить TipAmount
, то сначала мне нужно провести пальцем до значения выбора, а затем выбрать это значение. Я не знаю, почему это происходит !!
Вот мой код View,
struct ContentView: View {
@ObservedObject var tipViewModel = TipViewModel()
var body: some View {
VStack {
TextField("Enter bill amount", text: $tipViewModel.billAmount)
.textFieldStyle(RoundedBorderTextFieldStyle())
Picker(selection: $tipViewModel.tipPercentage, label: Text("Select tip %")) {
ForEach(tipViewModel.tipChoices, id: \.self) { choice in
//Text("\(self.tipViewModel.tipChoices[choice])")
Text("\(choice)")
}
}.pickerStyle(SegmentedPickerStyle())
.onTapGesture {
self.tipViewModel.calculateTip()
}
Text("Tip Percentage \(tipViewModel.tipPercentage)")
Text(tipViewModel.tipAmount == nil ? "Tip Amount" : "\(tipViewModel.tipAmount!)")
}.padding()
}
}
А вот файл TipViewModel,
class TipViewModel: ObservableObject {
@Published var billAmount: String = "" {
didSet{
calculateTip()
}
}
@Published var tipPercentage: Int = 10
@Published var tipAmount: Double = 0
let tipChoices = [10, 15, 20]
let didChange = PassthroughSubject<TipViewModel, Never>()
func calculateTip() {
guard let billAmount = Double(billAmount) else { return }
self.tipAmount = billAmount * Double(tipPercentage) / 100
self.didChange.send(self)
}
}
Любая помощь будет признательна !!