Как отобразить иерархические данные в SwiftUI? - PullRequest
0 голосов
/ 29 февраля 2020

В настоящее время я пытаюсь отобразить информацию о оценках учащегося в иерархической структуре, например:

https://support.schoology.com/hc/article_attachments/360004928433/Screen_Shot_2018-05-09_at_10.07.41_AM.png

В идеале, я бы хотелось бы иметь возможность расширять / сворачивать данные, но сначала мне нужно иметь возможность отображать фактические данные. Я все еще немного новичок в Swift и SwiftUI, поэтому у меня возникли небольшие проблемы, и я продолжаю получать следующую ошибку: «Компилятор не может проверить это выражение в разумные сроки; попробуйте разбить выражение на отдельные подпрограммы. -expressions «.

Может кто-нибудь помочь мне?

Вот мой код:

var courses: [Course] { *Sample Data* }

struct GradeCalculatorView: View {
     @State var course = courses[0]  //Course that is currently selected by the user
          var body: some View {
              VStack {
                    Text(course.name)
                    List(course.categories) { category in
                        VStack {
                            Text(category.name)
                            List(category.items) { item in
                                HStack {
                                    Text(item.name)
                                    Spacer()
                                    Text(String(item.scoredPoints) + " / " + String(item.totalPoints))
                                }
                            }
                        }
                    }
               }
          }
     }
}

1 Ответ

0 голосов
/ 29 февраля 2020

Скорее всего, у вас есть ошибка, которая сбивает с толку проверку типов и приводит к ошибке «неспособна проверить тип». Даже простая ошибка, такая как неправильное написание имени свойства, может вызвать такое поведение в большом выражении.

Выделите подпредставления, чтобы помочь найти реальную проблему. Я бы так учел:

var courses: [Course] { *Sample Data* }

struct GradeCalculatorView: View {
     @State var course = courses[0]  //Course that is currently selected by the user
      var body: some View {
          VStack {
                Text(course.name)
                List(course.categories) { category in
                    CategoryView(category: category)
                }
           }
      }
}

struct CategoryView: some View {
    var category: GradeCategory

    var body: some View {
        VStack {
            Text(category.name)
            List(category.items) { item in
                GradeItemRow(item: item)
            }
        }

    }
}

struct GradeItemRow: View {
    var item: GradeItem

    var body: some View {
        HStack {
            Text(item.name)
            Spacer()
            Text(String(item.scoredPoints) + " / " + String(item.totalPoints))
        }
    }
}
...