У меня есть несколько упражнений в базе данных, которые пользователь может добавить в новую таблицу под названием рутинный список. Эта таблица содержит идентификатор упражнения (Exercision), который соответствует идентификатору упражнения внутри таблицы упражнений (ExercisionID), и дню недели (Day). Пользователь может выбрать день недели и добавить несколько упражнений каждого дня в список программ, чтобы создать программу тренировок. Я хочу отобразить выбранные ими упражнения, упорядоченные по дням, к которым они относятся, с указанием дня в качестве названия. Это то, что у меня есть до сих пор:
import SwiftUI
import SQLite3
struct YourRoutines: View
{
@State var days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
@ObservedObject var routinedatabase: RoutineDatabase
@ObservedObject var exercisedatabase: ExercisesDatabase
var body: some View
{
var routines = routinedatabase.routineList
ZStack
{
Rectangle()
.foregroundColor(Color(.clear))
.frame(maxWidth: .infinity, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
Rectangle()
.frame(width: 380, height: 600, alignment: .center)
.foregroundColor(Color("Orange"))
.cornerRadius(15)
.shadow(radius: 15)
VStack
{
Text("Your Routine")
.foregroundColor(.white)
.font(.title)
.fontWeight(.bold)
.padding(.bottom, 10)
ForEach($days, id: \.self)
{ day in
VStack
{
Text(day.wrappedValue)
.font(.headline)
.padding(.bottom, 5)
ForEach(routinedatabase.routineList) { routine in
if days.contains(routine.Day)
{
Text(routine.Name)
}
}
}
.padding(.horizontal)
}
.padding()
.background(Color("Orange"))
.cornerRadius(15)
}
.navigationTitle("Your Routines")
}
}
}
Однако я продолжаю получать эти три ошибки. В строке: ForEach(routinedatabase.routineList) { routine in получаю следующие ошибки:
И на строке if days.contains(routine.Day) получаю такую ошибку:
Я пробовал использовать идентификатор внутри внутреннего цикла ForEach, но это не сработало.
Если у вас есть if в ForEach, SxitfUI представляет собой список, как будто if ничего не возвращает, тогда ForEach ничего не возвращает. Добавьте и пустое представление после if или else.





Попробуйте этот пример кода, исправляющий некоторые незначительные проблемы с кодом, который компилируется для меня.
struct YourRoutines: View {
@State private var days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
@ObservedObject var routinedatabase: RoutineDatabase
@ObservedObject var exercisedatabase: ExercisesDatabase
var body: some View {
// <--- here, no var declaration inside the view body
ZStack {
Rectangle()
.foregroundColor(Color.clear) // <--- here
.frame(maxWidth: .infinity, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
Rectangle()
.frame(width: 380, height: 600, alignment: .center)
.background(Color.orange) // <-- for testing
.cornerRadius(15)
.shadow(radius: 15)
VStack {
Text("Your Routine")
.foregroundColor(.white)
.font(.title)
.fontWeight(.bold)
.padding(.bottom, 10)
ForEach(days, id: \.self) { day in // <--- here, no $
VStack {
Text(day) // <--- here
.font(.headline)
.padding(.bottom, 5)
ForEach(routinedatabase.routineList) { routine in
if days.contains(routine.Day) {
Text(routine.Name)
}
}
}
.padding(.horizontal)
}
.padding()
.background(Color.orange) // <-- for testing
.cornerRadius(15)
}
.navigationTitle("Your Routines")
}
}
}
// for my testing
struct Routine: Codable, Identifiable {
let id: Int
var Name: String // <--- should be lower case
var Day: String // <--- should be lower case
}
// for my testing
class RoutineDatabase: ObservableObject {
@Published var routineList = [Routine]()
}
// for my testing
class ExercisesDatabase: ObservableObject {
@Published var items = [String]()
}
рабочая собака поддержи Украину ты спаситель
Это похоже на одно из вводящих в заблуждение сообщений об ошибках Swift. Возможно, у вас орфографическая ошибка или вы пытаетесь получить доступ к свойству, которое либо не существует, либо имеет неверный тип. Убедитесь, что
routine.Dayиroutine.Nameсуществуют и имеют типString(не является обязательным).