Сообщение об ошибке:
Не удалось вывести универсальный параметр "ID"
ForEach(0...self.workoutsViewModel.workoutRoutine[self.workoutIndex].routine[0].exercises.count - 1) { x in
Text("\\(x)")
}
Сообщение об ошибке:
Не удалось вывести универсальный параметр "ID"
ForEach(0...self.workoutsViewModel.workoutRoutine[self.workoutIndex].routine[0].exercises.count - 1) { x in
Text("\\(x)")
}
Элементы в коллекции, которые вы передаете в качестве первого аргумента ForEach
, должны соответствовать Identifiable
, или вы должны использовать другой инициализатор, чтобы указать KeyPath
идентификатора ваших элементов. Например, следующий код не компилируется:
struct MyModel {
let name: String
}
struct ContentView: View {
let models: [MyModel]
var body: some View {
ForEach(models) { model in
Text(model.name)
}
}
}
Массив models
не удовлетворяет требованиям инициализатора ForEach
, а именно его элементы не соответствуют Identifiable
. Я могу решить эту проблему одним из двух способов:
1.) Расширить MyModel
, чтобы соответствовать Identifiable
:
extension MyModel: Identifiable {
// assuming `name` is unique, it can be used as our identifier
var id: String { name }
}
2.) Используйте удобный инициализатор на ForEach
, который позволяет вам указать KeyPath
для вашего идентификатора:
var body: some View {
ForEach(models, id: \.name) { model in
Text(model.name)
}
}
Ответ @daltonclaybrook великолепен, потому что он объясняет, почему вы получаете эту ошибку, и иллюстрирует правильный подход к созданию пользовательской модели. Но если вы ищете временное, быстрое и грязное решение, это работает для меня в Xcode 11.2.1 и iOS 13.2 для массива String
:
ForEach(strings, id: \.self) { string in
...
}