Post

Replies

Boosts

Views

Activity

Reply to function with automatically increasing percentage (watchOS)
If I had to guess, I would say somerewehre right there's the mistake or something's missing: ] 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)") } } } Maybe somewhere in the extension, but not sure..
Topic: Programming Languages SubTopic: Swift Tags:
Apr ’24