Я изучаю SwiftUI (достаточно опытный разработчик ios / swift) и столкнулся с проблемой сборки при добавлении дополнительного элемента управления выбора. Смотрите код ниже. Когда я добавляю третий сборщик, а затем пытаюсь его собрать, он просто зависает и в итоге возвращается с ошибкой в другом месте. Удалите ЛЮБОЙ из сборщиков и сборок кода, и я смогу его запустить. Не могу не думать, что я делаю что-то глупое здесь (извините заранее, если я)
import SwiftUI
struct CheckoutView: View {
@EnvironmentObject var order: Order
static let paymentTypes = ["Cash", "Credit Card", "iDine Points"]
static let tipAmounts = [10, 15, 20, 25, 0]
static let pickupTimes = ["Now", "Tonight", "Tomorrow"]
@State private var paymentType = 0
@State private var addLoyaltyDetails = false
@State private var loyaltyNumber = ""
@State private var testText = ""
@State private var tipAmount = 1
@State private var pickupTime = 0
@State private var showingPaymentAlert = false
var totalPrice: Double {
let total = Double(order.total)
let tipValue = total / 100 * Double(Self.tipAmounts[tipAmount])
return total + tipValue
}
var body: some View {
Form {
Section {
Picker("How do you want to pay?", selection: $paymentType) {
ForEach(0 ..< Self.paymentTypes.count) {
Text(Self.paymentTypes[$0])
}
}
Toggle(isOn: $addLoyaltyDetails.animation()) {
Text("Add iDine loyalty card")
}
if addLoyaltyDetails {
TextField("Enter your iDine ID", text: $loyaltyNumber)
}
}
Section(header: Text("Add a tip?")) {
Picker("Percentage:", selection: $tipAmount) {
ForEach(0 ..< Self.tipAmounts.count) {
Text("\(Self.tipAmounts[$0])%")
}
}
.pickerStyle(SegmentedPickerStyle())
}
// get build error when adding this section...
Section(header: Text("Pickup Time")) {
Picker("Time:", selection: $pickupTime) {
ForEach(0 ..< Self.pickupTimes.count) {
Text(Self.pickupTimes[$0])
}
}
.pickerStyle(SegmentedPickerStyle())
}
Section(header: Text("TOTAL: $\(totalPrice, specifier: "%.2f")").font(.largeTitle)) {
HStack {
Spacer()
Button("Confirm order") {
self.showingPaymentAlert.toggle()
}
.padding(8)
.font(.headline)
.background(RoundedRectangle(cornerRadius: 8.0).fill(Color.blue))
.foregroundColor(.white)
}
}
}
.navigationBarTitle(Text("Payment"), displayMode: .inline)
.alert(isPresented: $showingPaymentAlert) {
Alert(title: Text("Order confirmed"), message: Text("Your total was $\(totalPrice, specifier: "%.2f") – thank you!"), dismissButton: .default(Text("OK")))
}
}
}