swift - 无法推断通用参数“父级”
问题描述
我正在处理我的第一个 Swift/SwiftUI 项目(教程除外)并且遇到了我认为是一个常见问题 - 错误Generic parameter 'Parent' could not be inferred
- 当问题实际上与List
我试图在表格中生成更低的位置。
我正在构建的应用程序是一个简单的发票应用程序:用户填写表单字段并发送发票。发票可以有多个行项目,用户一次输入一个,然后附加到应显示在表单内的字典中。
这是结构顶部和视图开头的相关变量,我希望我在其中正确声明行项目的变量以根据用户输入修改它们。
*根据以下@asperi 的建议进行了编辑。
@State private var lineItems = [LineItem]()
@State private var lineItem = LineItem()
struct LineItem: Codable, Hashable {
var productSku: String = ""
var productName: String = ""
var quantity: Double = 0
var unitPrice: Double = 0
}
func addLineItem(lineItem: LineItem){
lineItems.append(lineItem)
}
...
var body: some View {
NavigationView {
Form {
Section(header: Text("Customer Information")) { <-- error appears here
TextField("Customer Name", text: $customerName)
TextField("Customer Email", text: $customerEmail)
}
这是表单的相关部分,我试图在其中列出所有当前行项目,然后允许用户插入其他行项目。在添加代码之前,我没有收到任何错误List
,所以我很确定我在那里做错了什么。
Section(header: Text("Items")) {
List(lineItems, id: \.self) { item in
LineItemRow(lineItem: item)
Text(item.productName)
}
TextField("Product SKU", text: $productSKU)
TextField("Poduct Name", text: $productName)
TextField("Unit Price", text: $unitPrice, formatter: DoubleFormatter())
Picker("Quantity", selection: $quantity) {
ForEach(0 ..< 10) {
Text("\($0)")
}
}
Button(action: {
self.addLineItem(lineItem: LineItem(productSku:$productSKU,
productName:$productName,
quantity:$unitPrice,
unitPrice:$quantity))
print($lineItems)
}, label: {
Text("Add line item")
})
}
我已经在控制台中测试了按钮功能,它似乎确实正确地附加到了字典中,但我也需要它来显示。
我可能对List
. 有什么建议吗?
作为参考,这是整个视图:
struct AddInvoiceForm: View {
@State private var invoiceNumber: String = ""
@State private var _description: String = ""
@State private var dueDate: Date = Date()
@State private var sendImmediately: Bool = true
@State private var currency = 0
@State private var paymentType = 0
@State private var customerName: String = ""
@State private var customerEmail: String = ""
@State private var productSKU: String = ""
@State private var productName: String = ""
@State private var quantity: Int = 0
@State private var unitPrice: String = ""
@State private var lineItems = [LineItem]()
@State private var lineItem = LineItem()
struct LineItem: Codable, Hashable {
var productSku: String = ""
var productName: String = ""
var quantity: Double = 0
var unitPrice: Double = 0
}
func addLineItem(lineItem: LineItem){
lineItems.append(lineItem)
}
@State private var totalAmount: Double = 0.0
static let currencies = ["USD","GBP"]
var body: some View {
NavigationView {
Form {
Section(header: Text("Customer Information")) {
TextField("Customer Name", text: $customerName)
TextField("Customer Email", text: $customerEmail)
}
Section(header: Text("Invoice Information")) {
TextField("Invoice Number", text:$invoiceNumber)
TextField("Description", text:$_description)
DatePicker(selection: $dueDate, in: Date()..., displayedComponents: .date) {
Text("Due date")
}
Picker("Currency", selection: $currency) {
ForEach(0 ..< Self.currencies.count) {
Text(Self.currencies[$0])
}
}
}
Section(header: Text("Items")) {
List(lineItems, id: \.self) { item in
LineItemRow(lineItem: item)
Text(item.productName)
}
TextField("Product SKU", text: $productSKU)
TextField("Poduct Name", text: $productName)
TextField("Unit Price", text: $unitPrice, formatter: DoubleFormatter())
Picker("Quantity", selection: $quantity) {
ForEach(0 ..< 10) {
Text("\($0)")
}
}
Button(action: {
self.addLineItem(lineItem: LineItem(productSku:$productSKU,
productName:$productName,
quantity:$unitPrice,
unitPrice:$quantity))
print($lineItems)
}, label: {
Text("Add line item")
})
}
Section(header: Text("Totals")) {
Text("\(totalAmount)")
}
Section {
Button(action: {
print(Text("Send"))
}, label: {
Text("Send invoice")
})
}
}.navigationBarTitle("Invoice Details")
}
}
}
解决方案
List(lineItems, id: \.productSku) { item in <-- I get the error when I add this
您的项目是字典,但字典没有.productSku
键路径,所以错误。
我认为最简单和正确的方法是制作Item
为 struct
struct LineItem {
var productSku: String
...
}
...
@State private var lineItems = [LineItem]()
@State private var lineItem = LineItem()
...
List(lineItems, id: \.productSku) { item in
推荐阅读
- python - 没有 SQLContext 的 pyspark 中的 clearCache
- python - python中有没有办法最小化使用for循环获取常量值的二元函数?
- r - 用于从字符串中匹配和提取整数的正则表达式
- ruby-on-rails - Rails 如何从 Heroku 的错误 R15 中解救出来
- java - JPA:用具有相同ID的对象替换数据库中的对象
- jquery - 更改在页面中多个位置重复的按钮的状态,但仅更改被单击的按钮,而不更改其余按钮
- angularjs - 在检查元素的浏览器源代码中隐藏使用 ng-show 注释的 HTML 元素
- google-analytics-api - 当范围在 2016-08-23 之前开始时,GA 报告 API 返回 0 ga:users
- graphql - CraftQL - 无法在矩阵字段中找到标签字段
- node.js - 如何将 req.params 传递/使用到前端 js