Объявить функцию протокола со значениями аргументов по умолчанию

Я хочу, чтобы эта функция была в протоколе:

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))
    }
}
Другие вопросы по тегам