Ios “无法解决”;表达式类型不明确,没有更多上下文”;错误。有人能查一下我的密码吗?

Ios “无法解决”;表达式类型不明确,没有更多上下文”;错误。有人能查一下我的密码吗?,ios,swift,struct,swiftui,Ios,Swift,Struct,Swiftui,我对SwiftUI比较陌生,有时会通过搜索互联网来获取错误并解决它们,但这次我找不到任何解决问题的方法,于是决定在这里寻求帮助,stack overflow。我希望下面的代码可以帮助您找到我的问题 我的两个结构都是可识别的,实际上我在同一个视图中使用ShoppingList结构,使用相同的技术创建它的列表,并且它可以正常工作。但当我尝试将ForEach用于ShoppingList struct(它也是一个struct,符合可识别协议)的变量时,我得到了这样一个错误:“表达式类型不明确,没有更多上

我对SwiftUI比较陌生,有时会通过搜索互联网来获取错误并解决它们,但这次我找不到任何解决问题的方法,于是决定在这里寻求帮助,stack overflow。我希望下面的代码可以帮助您找到我的问题

我的两个结构都是可识别的,实际上我在同一个视图中使用ShoppingList结构,使用相同的技术创建它的列表,并且它可以正常工作。但当我尝试将ForEach用于ShoppingList struct(它也是一个struct,符合可识别协议)的变量时,我得到了这样一个错误:“表达式类型不明确,没有更多上下文”

这是我得到错误的视图:

struct ListDetailView: View {
    @EnvironmentObject var session: SessionStore
    var item: ShoppingList
    @State private var isAddNewViewActive: Bool = false

    var body: some View {
        List {
            Section(header: Text("Products")) {
                ForEach(self.item.products, id: \.id) { product in <<<--- ERROR LINE
                        Text(product.name)
                    }
            }
            Section(header: Text("")) {
                Button(action: { self.isAddNewViewActive.toggle() } ) {
                    Text("Click to add new product")
                }
            }
        }
        .listStyle(GroupedListStyle())
        .navigationBarTitle(self.item.name)
        .sheet(isPresented: $isAddNewViewActive) {
            AddNewItemView(session: self.session, item: self.item, isViewActive: self.$isAddNewViewActive)
        }
    }
}

提前感谢所有StackOverflow社区。

我正确遵守了Equalable协议

struct ShoppingList: Identifiable, Equatable {
        static func == (lhs: ShoppingList, rhs: ShoppingList) -> Bool {
            return lhs.id == rhs.id && rhs.id == lhs.id
        }
        var id: UUID()
        ...
        init(name: String, brand: String = "", imageURL: String = "", links: [Int: String] = [:], description: String = "") {
            ...
        }
    }

无需初始化UUID,UUID()将自行生成

显然,我在此处发布的代码片段的一个完全不相关的部分中有一个错误(当我单击视图上有错误的按钮时弹出的工作表视图),这是导致错误的原因:/


我在这里发布的代码工作正常。

ForEach(self.item.products){product in Text(product.name)}返回lhs.id==rhs.id&&rhs.id==lhs.id?在回答之前,请检查您的答案…我需要初始化某些情况下的id值,但在本例中尝试不这样做,以查看这是否会导致错误,并且无法解决问题。我不理解您答案中的可等分部分。如果您的类型具有唯一标识实体的id属性,则需要正确实现
struct ShoppingList: Identifiable, Equatable {
        static func == (lhs: ShoppingList, rhs: ShoppingList) -> Bool {
            return lhs.id == rhs.id && rhs.id == lhs.id
        }
        var id: UUID()
        ...
        init(name: String, brand: String = "", imageURL: String = "", links: [Int: String] = [:], description: String = "") {
            ...
        }
    }