Мне кажется, что вы должны написать метод экземпляра вашего Student
класса, который принимает в качестве параметра другой Student
и сравнивает их:
Функция, которая сравнивает средние оценки 2 Student
объектов, не должна иметь никакого кода, касающегося конкретных учащихся. Он должен быть написан как метод экземпляра для сравнения текущего ученика с другим учеником.
class Student {
//Your other code here...
func hasHigherAverageThan(otherStudent: Student) -> Bool {
//Your code to compare the current student to otherStudent goes here
//comare `self` to `otherStudent` and return a Bool result
}
}
Затем, вне класса Student, вы должны создать и сравнить 2 учащихся:
let peter = Student(id: 5, firstName: "Peter", lastName: "Parker")
peter.addGrade(2.95)
peter.addGrade(3.45)
let lois = Student(id: 6, firstName: "Lois", lastName: "Lane")
lois.addGrade(4.0)
lois.addGrade(3.2)
if lois.hasHigherAverageThan(peter) {
print("\(lois.firstName) beats \(peter.firstName)")
} else {
print("\(peter.firstName) beats \(lois.firstName)")
}
(Обратите внимание, что приведенный выше код не позволяет двум учащимся иметь одинаковый средний балл.)
Проверьте, можете ли вы разработать код для метода hasHigherAverageThan(otherStudent:)
.
EDIT:
Еще одна вещь: вы дали вашему Student
объекту массив значений оценки, что кажется разумным. Почему ваша средняя функция принимает какие-либо параметры, а тем более переменный параметр? Вероятно, следует написать без параметров:
func average() -> Float
Для вычисления средней оценки будет использоваться массив grades
.
РЕДАКТИРОВАТЬ # 2:
Я бы переписал вашу среднюю функцию следующим образом:
func average() -> Float {
guard !grades.isEmpty else { return 0.0 }
return Float(grades.reduce(0.0, { $0 + Double($1) })/Double(grades.count))
}
Изменения:
- Избавился от параметров
- Избавился от assert и вместо этого вернул 0, если массив пуст
(Вы также можете сделать так, чтобы он возвращал Optional
Float
/ Double
и возвращал nil, если массив пуст.)
Я бы также предложил остановиться на одном типе с плавающей запятой и использовать его повсеместно. Double является родным типом с плавающей точкой, поэтому я бы сделал массив классов массивом типа Double, а функция average()
вернула бы Double
.