Объявить функцию протокола со значениями аргументов по умолчанию
Я хочу, чтобы эта функция была в протоколе:
func slideToRight(currentViewController viewController: UIViewController, completion: ((Bool)->())? = nil) {
// do some stuff
}
Но когда я пишу такой протокол:
protocol SomeDelegate {
func slideToRight(currentViewController viewController: UIViewController, completion: ((Bool)->())? = nil)
}
Я получил ошибку:
Аргумент по умолчанию не разрешен в методе протокола
Я знаю, я могу определить подпись таким образом:
protocol SomeDelegate {
func slideToRight(currentViewController viewController: UIViewController, completion: ((Bool)->())?)
}
Но тогда я не смогу вызвать функцию без слова "завершение":
slideToRight(currentViewController viewController: vc)
1 ответ
К сожалению, необязательные аргументы недопустимы в протоколах, но вы можете обойти это, создав расширение протокола:
protocol SomeDelegate {
// with the completion parameter
func slideToRight(currentViewController viewController: UIViewController, completion: ((Bool)->())?)
}
extension SomeDelegate {
// without the completion parameter
func slideToRight(currentViewController viewController: UIViewController) {
slideToRight(slideToRight(currentViewController: viewController, completion: nil))
}
}