Если внутри ForEach, SwiftUI 5

У меня есть несколько упражнений в базе данных, которые пользователь может добавить в новую таблицу под названием рутинный список. Эта таблица содержит идентификатор упражнения (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 получаю следующие ошибки:

  1. Невозможно преобразовать значение типа «[Routines]» в ожидаемый тип аргумента «Binding».
  2. Общий параметр «C» не может быть выведен.

И на строке if days.contains(routine.Day) получаю такую ​​ошибку:

  1. Метод экземпляра «содержит» требует, чтобы типы «String» и «Binding<Subject.Element>» были эквивалентными.

Я пробовал использовать идентификатор внутри внутреннего цикла ForEach, но это не сработало.

Это похоже на одно из вводящих в заблуждение сообщений об ошибках Swift. Возможно, у вас орфографическая ошибка или вы пытаетесь получить доступ к свойству, которое либо не существует, либо имеет неверный тип. Убедитесь, что routine.Day и routine.Name существуют и имеют тип String (не является обязательным).

Benzy Neez 11.03.2024 22:42

Если у вас есть if в ForEach, SxitfUI представляет собой список, как будто if ничего не возвращает, тогда ForEach ничего не возвращает. Добавьте и пустое представление после if или else.

Ptit Xav 11.03.2024 22:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте этот пример кода, исправляющий некоторые незначительные проблемы с кодом, который компилируется для меня.

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]()
}

рабочая собака поддержи Украину ты спаситель

fernando_gdv 12.03.2024 02:40

Другие вопросы по теме

Похожие вопросы

Когда нам следует использовать многоадресную рассылку autoconnect()
Распространение пользовательских признаков не работает должным образом за пределами иерархии представлений
Общий кодируемый ответ API метода публикации не приходит должным образом быстро
Ожидается стоимость объединенного издателя
Получение вызова основного изолированного статического метода 'loadMainScene()' при синхронной неизолированной контекстной ошибке в приложении ARKit SwiftUI
Локальная база данных загружает изображения, но память бесконечно растет и переполняется - SwiftUI
Как обновить значение среды SwiftUI «tintColor»
Как сделать высоту кадра динамической в ​​зависимости от высоты изображения, чтобы изображение не обрезалось?
Невозможно передать объект как привязку к дочернему представлению из цикла
SwiftData аварийно завершает работу при попытке доступа к свойству структуры