Описание проблемы
В коде есть скобки после вызова метода super.init(name: name, country: country, birthDay: birthDay, email: email, joiningDate: joiningDate, role: RolePessoa)
в классе Atleta
.Компилятор Swift считает, что это замыкание передается в качестве последнего параметра.
Решение
Намерение здесь состояло в том, чтобы вызвать метод super.init
и передать туда правильные параметры.Мы можем изменить вызов метода для достижения цели:
super.init(name: name, country: country, birthDay: birthDay, email: email, joiningDate: joiningDate, role: .Aluno)
Обратите внимание, что мы передаем .Aluno
как роль, так как она все равно используется в инициализаторе класса Pessoa
.
Предложение по рефакторингу
Возможно, вы захотите удалить role
из параметров инициализатора, чтобы упростить код или присвоить ему значение по умолчанию, например:
init(name: String, country: String, birthDay: Date, email: String, joiningDate: Date, role: RolePessoa = .Aluno) {
self.name = name
self.country = country
self.birthDay = birthDay
self.email = email
self.joiningDate = joiningDate
self.role = role
}
Тогда вызов super init можно изменить следующим образом:
super.init(name: name, country: country, birthDay: birthDay, email: email, joiningDate: joiningDate)
Обратите внимание, что в этом случае мы вообще не указываем role
, так как он назначен .Aluno
по умолчанию.При необходимости мы также можем указать другую роль:
super.init(name: name, country: country, birthDay: birthDay, email: email, joiningDate: joiningDate, role: .Funcionario)
Существует хорошая официальная документация по инициализаторам для чтения для начинающих: Инициализация .