Swift 泛型';文本字段';需要表单中的参数
我有以下表格:Swift 泛型';文本字段';需要表单中的参数,swift,swiftui,Swift,Swiftui,我有以下表格: struct RentView: View { @ObservedObject private var viewModel: RentViewModel init(viewModel: RentViewModel){ self.viewModel = viewModel } var textField : TextField var body: some View { Navi
struct RentView: View {
@ObservedObject private var viewModel: RentViewModel
init(viewModel: RentViewModel){
self.viewModel = viewModel
}
var textField : TextField
var body: some View {
NavigationView {
Form {
Section(header: Text("Enter total rent")
.fontWeight(.bold)) {
TextField("Total rent", text: $viewModel.amount.totalRent)
.keyboardType(.decimalPad)
}
Section(header: Text("Enter total bills?")
.fontWeight(.bold)) {
TextField("Total bills", text: $viewModel.amount.totalBills)
.keyboardType(.decimalPad)
}
Section(header: Text("Enter wages?")
.fontWeight(.bold)) {
TextField("Your monthly wage", text: $viewModel.amount.myMonthlyIncome)
.keyboardType(.decimalPad)
}
Section(header: Text("What are the wages of your housemates?")
.fontWeight(.bold)) {
ForEach(viewModel.incomes.indices){
index in TextField("Housemate \(index + 1)", text: $viewModel.incomes[index])
.keyboardType(.decimalPad)
}
}
Section {
Text("Your share: £\(viewModel.yourShare, specifier: "%.2f")")
.fontWeight(.bold)
.font(Font.system(size: 22, design: .default))
.font(.subheadline)
}.foregroundColor(Color.red)
if textField != nil && !textField.hasText {
Text("Please fill in all sections")
}
}
}
}
}
这将根据收入平均计算室友之间的租金。但是,只有在填写完所有表格后,才会更新。因此,我想弹出一条消息,说“请填写所有部分”(如上在最后一节),如果一个文本字段已被留空。但是我得到了一个错误:“引用泛型类型‘TextField’需要参数”我对Swift很陌生,不确定这里需要什么参数,为什么
我的租金视图模型如下所示:
import Foundation
import Combine
class RentViewModel : ObservableObject {
@Published var amount: Amounts
@Published var incomes: [String]
init(_ amount: Amounts, housemates: Int){
self.amount = amount
self.incomes = Array(repeating: "", count: housemates)
}
var myMonthlyIncome : String { return amount.myMonthlyIncome }
var housemateMonthlyIncome : String { return amount.housemateMonthlyIncome }
var totalRent : String { return amount.totalRent }
var totalBills : String { return amount.totalBills }
var yourShare: Double {
guard let totalRent = Double(totalRent) else { return 0 }
guard let totalBills = Double(totalBills) else {return 0 }
guard let myMonthlyIncome = Double(myMonthlyIncome) else { return 0 }
let incomesInt = incomes.compactMap { Int($0) }
let housemateMonthlyIncome = Double(incomesInt.reduce(0, +))
let totalIncome = Double(myMonthlyIncome + housemateMonthlyIncome)
let percentage = myMonthlyIncome / totalIncome
let householdTotal = totalRent + totalBills
let value = (householdTotal * percentage)
return (round(100*value)/100)
}
}
你能分享你剩下的代码吗?需要最小的、可复制的示例,所以我们可以复制您的问题—这是模型和绑定中不匹配类型的问题。你会显示RentViewModel和内部构件吗?@Asperi我已更新显示RentViewModel这是由于
var textField:textField
和相关的原因-删除所有这些-这是不正确的,并且使条件也基于viewModel
谢谢@Asperi-你是什么意思使条件基于viewModel
?