Я пытаюсь создать список, используя ForEach и NavigationLink массива данных.
Я считаю, что мой код (см. Конец сообщения) верен, но моя сборка не выполняется из-за «Отсутствует аргумент для параметр 'index' в вызове "и переносит меня в SceneDelegate.swift, в место, куда мне раньше не приходилось рисковать.
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
Я могу получить код для запуска, если я изменю; 1007 *
, но тогда все мои ссылки содержат одни и те же данные, что имеет смысл, поскольку я называю позицию индекса.
Я пробовал, index: self.index (это то, что я использую в своем NavigationLink) и получите другое сообщение об ошибке - Невозможно преобразовать значение типа '(Any) -> Int' в ожидаемый тип аргумента 'Int'
Ниже приведены фрагменты моего кода для справки;
struct HabitItem: Identifiable, Codable {
let id = UUID()
let name: String
let description: String
let amount: Int
}
class HabitsList: ObservableObject {
@Published var items = [HabitItem]()
}
struct ContentView: View {
@ObservedObject var habits = HabitsList()
@State private var showingAddHabit = false
var index: Int
var body: some View {
NavigationView {
List {
ForEach(habits.items) { item in
NavigationLink(destination: HabitDetail(habits: self.habits, index: self.index)) {
HStack {
VStack(alignment: .leading) {
Text(item.name)
.font(.headline)
Text(item.description)
}
}
}
}
}
}
}
}
struct HabitDetail: View {
@Environment(\.presentationMode) var presentationMode
@ObservedObject var habits: HabitsList
var index: Int
var body: some View {
NavigationView {
Form {
Text(self.habits.items[index].name)
}
}
}
}