Класс, соответствующий протоколу с дополнительным параметром — Swift

#swift

Вопрос:

Следующий фрагмент кода хорош, но можно ли опустить isOnboarding параметр из ContactsViewController класса?

Это означало ContactsViewController бы , что не соответствует ErrorController , но есть ли в любом случае необходимость использовать функцию с параметром, который в данном случае не используется?

 class ErrorViewControllerDelegate {}

protocol ErrorController {
   func showError(_ error: String, isOnboarding: Bool)
}

extension  ErrorController {
   func showError(_ error: String, isOnboarding: Bool = true) {
    showError(error, isOnboarding: isOnboarding)
   }
}

class ContactsViewController: UIViewController, ErrorController {
   func showError(_ error: String) {
    showError(error)
   }
}

let contacts: ErrorController = ContactsViewController()
contacts.showError("I don't need a delegate.")
contacts.showError("I need a delegate.", isOnboarding: true)
 

Цель: использовать func showError(_ error: String) , а не func showError(_ error: String, isOnboarding: Bool) как функцию, чтобы соответствовать ErrorController in ContactsViewController .

Комментарии:

1. Возможно, я ошибаюсь, но разве ваш код не вызывает бесконечную рекурсию?

2. Да, это правильно. В этом-то и проблема. Если вы используете функцию showError(_ ошибка: Строка, isOnboarding: Bool), она работает должным образом. Но может ли это работать с unc showError(_ ошибка: строка)?

3. Ммм, нет? Каков именно ваш ожидаемый результат? Прямо сейчас у вас есть только 2 showError метода, оба из которых вызывают другой showError метод. Независимо от того, как вы измените их подписи, рекурсия не прекратится. Я предлагаю вам добавить несколько print вызовов, чтобы вам было легче описать ожидаемый результат (например, «Я ожидаю, что» … «будет напечатано»).

4. Есть ли в любом случае необходимость использовать функцию с параметром, который в данном случае не используется? У меня есть рабочий код, но я хотел бы знать, могу ли я его улучшить.

5. Да, есть, но почему ваши функции вызывают сами себя?