Как мне перебрать массив объектов, чтобы получить итоги, которые будут использоваться в моих представлениях. Во-вторых, где мне запустить эту функцию, чтобы полученные итоги можно было повторно использовать в других частях приложения?
Я пытаюсь использовать метод массива reduce(_:_:)
, но не знаю, лучший ли это подход.
Мне нужно суммировать общее количество студентов в каждом классе. т.е. в 10 классе 2 ученика. В 11 классе учится 1 ученик. В 12 классе учится 3 ученика.
Я уже какое-то время зацикливаюсь на этом. Спасибо!
import SwiftUI
struct Student: Identifiable {
let id: String
let name: String
let gradeLevel: Int
}
class GetStudents: ObservableObject {
@Published var items = [Student]()
init() {
self.items = [
Student(id: "aa1", name: "Bobby", gradeLevel: 12),
Student(id: "aa2", name: "Tommy", gradeLevel: 11),
Student(id: "aa3", name: "Susy", gradeLevel: 10),
Student(id: "aa4", name: "Billy", gradeLevel: 12),
Student(id: "aa5", name: "Jimmy", gradeLevel: 12),
Student(id: "aa6", name: "Johnny", gradeLevel: 10),
]
}
}
struct ContentView: View {
@ObservedObject var students = GetStudents()
var body: some View {
VStack {
Text("Total Students: \(self.getTotal())")
// Here is where I'm stuck, need total per gradeLevel derived from array
Text("Total Per Grade Level")
// Grade10 2
// Grade11 1
// Grade12 3
List {
ForEach(students.items) { student in
HStack {
Text("Name: \(student.name)")
Spacer()
Text("Grade: \(student.gradeLevel)")
}
}
}
}
}
private func getTotal() -> Int {
return self.students.items.count
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}