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: