Я пытаюсь реализовать представление списка, используя SwiftUI и основные данные, но сталкиваюсь с ошибкой «компилятор не может проверить это выражение в разумные сроки». Список содержит «уроки», и каждый «тип» урока приводит к игре другого типа, однако возникает ошибка, когда я добавляю условия if, else if, которые ведут к соответствующей ссылке на игру. Из других постов я понимаю, что код должен быть разбит на более простые части, но мне интересно, как лучше всего это сделать, особенно для условных операторов. Один из способов, который я попробовал, заключается в использовании спецификаций c @FetchRequests для извлечения одного указанного c урока за раз, и хотя это работает для заполнения списка, оно создает неожиданное поведение, когда сущность обновляется из другого представления. Подробнее об этой проблеме см. Здесь: SwiftUI List View не обновляется после обновления сущности Core Data в другом View . Буду признателен за любые предложения о том, как упростить этот код или как избежать этой ошибки. Кстати, эта ошибка возникает только при использовании основных данных; когда я «жестко кодирую» объекты напрямую, используя классы в файле swift, эта ошибка не возникает.
import SwiftUI
import CoreData
import UIKit
struct LessonList: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Lesson.entity(), sortDescriptors: []) var lessons: FetchedResults<Lesson>
var body: some View {
NavigationView {
List {
Section(header: Text("Test")) {
ForEach(lessons) { lesson in
if (lesson.stage == 1) && (lesson.type == "phonicIntro") {
NavigationLink(destination: PhonicIntroGame(lesson: lesson)) {
LessonRow(lesson: lesson)
}
} else if (lesson.stage == 1) && (lesson.type == "phonicDrag") {
NavigationLink(destination: PhonicDragGame(lesson: lesson)) {
LessonRow(lesson: lesson)
}
}
}
}
}
.navigationBarTitle("Lessons")
}
}//end of body