我是新手,需要定义某种形式的Global Dictionary,以便可以在整个项目中访问其内容。我的理解是可以使用struct class
我创建了一个结构并为其添加了值,现在我想访问视图中的每个值
这是我的产品结构
struct Product {
let name: String
let aisleNo:Int
let location_section: Int
let location_zone: String
let productPrice: Int
}
然后创建了一个全局
import Foundation
struct Global {
static var productList = [Product]()
}
这就是我将许多产品附加到产品上的方式
class SearchResult : ObservableObject {
var productList = [Product]()
//There could be hundreds of product in the array
for product in productArray {
let productName = product.productName!
let aisleNo = product.productLocation_aisle.value!
let location_section = product.productLocation_section.value!
let location_zone = product.productLocation_zone!
let productPrice = product.productPrice.value!
let product_real_id = product._id!
Global.productList.append(Product(name: productName, aisleNo: aisleNo, location_section: location_section, location_zone: location_zone, productPrice: Int(productPrice)))
}
这是我要在其中显示产品内容的搜索结果视图
struct SearchResultView: View {
var searchResults = Global.productList
var body: some View {
VStack {
List {
ForEach(model.searchResults, id: \.self) { text in
Text(text)
}
}
}
}
}
我似乎可以将其显示在searchResultView中。怎么了? 我不断收到此错误
通用结构“ ForEach”要求“产品”符合“可哈希化” 初始化程序“ init(_ :)”要求“产品”符合“ StringProtocol”
答案 0 :(得分:0)
您需要将“ searchResults”设置为等于“ productList” 现在,您的searchResults为EMPTY。它只是作为您的结构实例存在而没有数据。
一种选择是使变量作用域成为全局范围,然后将新变量=设置为它
self.searchResults = Global.productList
-编辑
您很近。 在此处设置变量的位置
var searchResults = Global.productList
它必须是这样的。
var searchResults = [Product]() // ->Creates an instance of the struct object
然后将其设置为等于全局数组。
self.searchResults = Global.productList
还应删除冗余变量var productList = [Product]()
此外,一些注意事项
for product in productArray {
let productName = product.productName!
let aisleNo = product.productLocation_aisle.value!
let location_section = product.productLocation_section.value!
let location_zone = product.productLocation_zone!
let productPrice = product.productPrice.value!
let product_real_id = product._id!
Global.productList.append(Product(name: productName, aisleNo: aisleNo, location_section: location_section, location_zone: location_zone, productPrice: Int(productPrice)))
}
您正在使用所有let变量来做额外的工作。 更好的方法是这样做。
for product in productArray {
Global.productList.append(Product(name: product.name, aisleNo: product.aisleNo, location_section: product.location_section, location_zone: product.location_zone, productPrice: Int(product.productPrice)))
}
编辑-哈希错误
尝试一下
struct Product: Hashable {
let name: String
let aisleNo:Int
let location_section: Int
let location_zone: String
let productPrice: Int
}