Hallo,
ich habe folgendes Problem:
Ich versuche mich an einer App, die ein kleines Hilfsmittel für mein Studium sein soll, dort die Prüfugnen anzeigt und bei anklicken der jeweiligen Prüfung wird diese grün markiert und die jeweiligen ECTS, die ich für die jeweiligen Prüfungen hinterlegt habe, erhöhen im Verhältnis dieser ECTS zu den ECTS des gesamten Studiums den Fortschritt in Prozent.
Sie ist so aufgebaut, dass bei Start zunächst die Felder "Erster Studienabschnitt", "Zweiter Studienabschnitt", "Freie Studienleistungen" kommt, jeweils mit eigenen Detailansichten.
Nun funktioniert das ganze für freie Studienleistungen überhaupt nicht.
Geht man auf "Freie Studienleistungen", erscheint "KS", "AG", "UE", "KK", "VO", "VL", "ECTS aus anderen Studien", "KV", "Repetitorien".
Diese 9 Felder wieder verweisen auf Detailansichten, wo die einzelnen prüfungen drinnen sieht, welche bei Markierung zum Fortschritt hinzugerechnet werden sollten.
Das Problem ist aber, dass alle Prüfungen aus diesen 9 Views insgesamt nur bis 24 ECTS zum Studienfortschritt dazu zählen sollen, also ab 24 ECTS sich der Studienfortschritt in Prozent nicht mehr erhöht.
Das Problem ist aber, wenn ich eine Prüfung grün markiere, dass die Prozentanzahl gleich bleibt und sich gar nicht erhöht...
Weiß jemand wo hier das Problem ist?
Ich persönlich denke, dass der Fehler in diesem Abschnitt wo liegen müsste, vermutlich in der extension. Weiß jemand weiter?
Alles anzeigen
ich habe folgendes Problem:
Ich versuche mich an einer App, die ein kleines Hilfsmittel für mein Studium sein soll, dort die Prüfugnen anzeigt und bei anklicken der jeweiligen Prüfung wird diese grün markiert und die jeweiligen ECTS, die ich für die jeweiligen Prüfungen hinterlegt habe, erhöhen im Verhältnis dieser ECTS zu den ECTS des gesamten Studiums den Fortschritt in Prozent.
Sie ist so aufgebaut, dass bei Start zunächst die Felder "Erster Studienabschnitt", "Zweiter Studienabschnitt", "Freie Studienleistungen" kommt, jeweils mit eigenen Detailansichten.
Nun funktioniert das ganze für freie Studienleistungen überhaupt nicht.
Geht man auf "Freie Studienleistungen", erscheint "KS", "AG", "UE", "KK", "VO", "VL", "ECTS aus anderen Studien", "KV", "Repetitorien".
Diese 9 Felder wieder verweisen auf Detailansichten, wo die einzelnen prüfungen drinnen sieht, welche bei Markierung zum Fortschritt hinzugerechnet werden sollten.
Das Problem ist aber, dass alle Prüfungen aus diesen 9 Views insgesamt nur bis 24 ECTS zum Studienfortschritt dazu zählen sollen, also ab 24 ECTS sich der Studienfortschritt in Prozent nicht mehr erhöht.
Das Problem ist aber, wenn ich eine Prüfung grün markiere, dass die Prozentanzahl gleich bleibt und sich gar nicht erhöht...
Weiß jemand wo hier das Problem ist?
Ich persönlich denke, dass der Fehler in diesem Abschnitt wo liegen müsste, vermutlich in der extension. Weiß jemand weiter?
Quellcode
- ]
- let maxECTSPerSection: [CourseCategory: Int] = [
- .firstSection: 44,
- .secondSection: 172,
- .freeStudy: 24
- ]
- init() {
- loadCourses()
- }
- var progress: Double {
- let completedECTS = courses.filter { $0.isCompleted }.reduce(0) { $0 + $1.ects }
- let totalECTS = 240 // Gesamtwert für ECTS im Studium
- return (Double(completedECTS) / Double(totalECTS)) * 100
- }
- func toggleCourseCompleted(courseID: String) {
- if let index = courses.firstIndex(where: { $0.id == courseID }) {
- courses[index].isCompleted.toggle()
- saveCourses()
- }
- }
- private func completedECTS(for category: CourseCategory) -> Int {
- let completedECTSAsDouble = courses.filter { $0.category == category && $0.isCompleted }.reduce(0.0) { $0 + $1.ects }
- return Int(completedECTSAsDouble)
- }
- }
- // Extension außerhalb der Klassendefinition
- extension StudyProgressViewModel {
- func saveCourses() {
- do {
- let encodedCourses = try JSONEncoder().encode(courses)
- UserDefaults.standard.set(encodedCourses, forKey: "savedCourses")
- } catch {
- print("Fehler beim Speichern der Kurse: \(error)")
- }
- }
- func loadCourses() {
- guard let savedCoursesData = UserDefaults.standard.data(forKey: "savedCourses") else { return }
- do {
- let decodedCourses = try JSONDecoder().decode([Course].self, from: savedCoursesData)
- DispatchQueue.main.async {
- self.courses = decodedCourses
- }
- } catch {
- print("Fehler beim Laden der Kurse: \(error)")
- }
- }
- }
- extension StudyProgressViewModel {
- // Ihre neue Funktion...
- func updateFreeStudyECTS(selectedCourses: Set<String>) {
- let selectedCoursesECTS = courses.filter { selectedCourses.contains($0.name) && $0.category == .freeStudy }
- .reduce(0.0) { $0 + $1.ects }
- print("Aktualisiere Free Study ECTS für ausgewählte Kurse: \(selectedCourses)")
- if selectedCoursesECTS <= Double(maxECTSPerSection[.freeStudy] ?? 24) {
- for course in courses where selectedCourses.contains(course.name) && course.category == .freeStudy {
- if !course.isCompleted {
- toggleCourseCompleted(courseID: course.id)
- }
- }
- } else {
- print("Die Gesamtanzahl der ECTS für freie Studienleistungen darf 24 nicht überschreiten.")
- }
- }
- }
- extension StudyProgressViewModel {
- func isCourseCompleted(courseName: String) -> Bool {
- return courses.first { $0.name == courseName }?.isCompleted ?? false
- }
- func toggleCourseCompletedByName(courseName: String) {
- print("Looking for course: \(courseName)")
- print("Available courses: \(courses.map { $0.name })")
- if let index = courses.firstIndex(where: { $0.name == courseName }) {
- print("Course found: \(courseName), toggling completion")
- toggleCourseCompleted(courseID: courses[index].id)
- } else {
- print("Course not found: \(courseName)")
- }
- }
- }
- struct StudyProgressView: View {
- @EnvironmentObject var viewModel: StudyProgressViewModel
- var body: some View {
- VStack {
- Text("Fortschritt: \(viewModel.progress, specifier: "%.2f")%")
- .font(.custom("Futura", size: 17))
- .bold() // Macht den Text fett
- }
- }
- }