Если вы замените строку
TaskView(task: item).frame(minWidth: 0, idealWidth: geometry.size.width * 0.80, maxWidth: geometry.size.width, alignment: .leading)
простой Text("Testing")
, вы увидите изменение ошибки на
Тип протокола 'DatedOrPrioritizedStruct' не может соответствовать 'Hashable ', поскольку только конкретные типы могут соответствовать протоколам
Это можно исправить, указав ForEach
идентификатор, равный \.id
:
ForEach(self.data, id: \.id) { item in
TaskView(task: item).frame(minWidth: 0, idealWidth: geometry.size.width * 0.80, maxWidth: geometry.size.width, alignment: .leading)
}
Убедитесь, чтоTaskView
task
имеет тип DatedOrPrioritizedStruct
, а не Task
, поскольку, поскольку ваш массив data
содержит DataOrPrioritizedStruct
объектов, item
в ForEach
будет DataOrPrioritizedStruct
, а неa Task
.
Примечание : В настоящее время Xcode часто выдает не относящиеся к делу ошибки, как в этом случае, и вы можете попытаться выяснить истинный источник, упростив свой код (который ясделал, поместив Text("Testing")
в ForEach
и закомментировав строку TaskView
).
Редактировать : Чтобы уточнить, TaskView
ожидает получить тип Task
, ноForEach
перебирает массив DataOrPrioritizedStruct
, поэтому, когда вы передаете item
в TaskView
, нет никакой гарантии, что объект имеет данные members, уникальные для Task
, поэтому тип TaskView
task
должен быть DataOrPrioritizedStruct
, а не Task
.