Почему этот цикл ForEach продолжает вызывать ошибку?

У меня проблема с этим циклом ForEach. Я пытаюсь заставить его пройти через массив, но он продолжает давать неизвестную ошибку, которая говорит: «Не удалось произвести диагностику для выражения; пожалуйста, отправьте отчет об ошибке и включите проект ». Когда я удаляю цикл ForEach, ошибка исчезает.

Это файл с ошибкой

struct ReceiptView: View {

let item: ItemsStruct

var body: some View {
    VStack {
        
        // Header
        HStack {
            VStack(alignment: .leading) {
                Text(item.company)
                    .font(.title2)
                    .fontWeight(.semibold)
                Text(item.date)
                    .font(.caption)
            }
            Spacer()
            Menu {
                Text("Menu Item 1")
                Text("Menu Item 2")
                Text("Menu Item 3")
            } label: {
                Image(systemName: "ellipsis.circle")
                    .scaleEffect(1.2)
            }
        }.padding()
        
        
        // FIXME: This ForEach is causing an error
        ForEach(item.products) { prod in
            Text(prod.product)
        }

    }
}

}

И это ItemsStruct:

public struct ItemsStruct: Identifiable {
    public let id = UUID()
    let company: String
    let date: String
    let total: String
    let products: [itemsArray]

    struct itemsArray {
        let product: String
        let quantity: Int
        let totalPrice: Double
    }

}

Есть мысли о том, что вызывает эту ошибку?


person samuel0701    schedule 25.03.2021    source источник
comment
Ваша структура ItemsArray не соответствует Identifiable.   -  person Andrew    schedule 25.03.2021
comment
@ Андрей Спасибо. Не могу поверить, что я это пропустил   -  person samuel0701    schedule 25.03.2021
comment
возможно, ProductOrder было бы лучшим именем для типа itemsArray - имя не множественное, это не массив, а быстрые типы именуются с заглавной буквы   -  person Shadowrun    schedule 25.03.2021
comment
Я согласен. Но я просто один из тех, кто в первую очередь выбирает все, что приходит в голову. Хотя спасибо за совет   -  person samuel0701    schedule 25.03.2021


Ответы (1)


Вам нужен еще один идентифицируемый

public struct ItemsStruct: Identifiable {
    
    public let id: UUID = UUID()
    let company: String
    let date: String
    let total: String
    let products: [ItemsArray]
    
}

struct ItemsArray: Identifiable {
    
    let id: UUID = UUID()          // <<: Here!
    let product: String
    let quantity: Int
    let totalPrice: Double
    
}
person swiftPunk    schedule 25.03.2021
comment
Спасибо! Ценить это - person samuel0701; 25.03.2021
comment
добро пожаловать, я только что исправил itemsArray на ItemsArray, он должен быть заглавным, и, возможно, даже лучшее название было бы неплохой идеей. - person swiftPunk; 25.03.2021
comment
Я знал об этой опечатке, но так и не смог ее изменить. Спасибо - person samuel0701; 25.03.2021