Значение параметра по умолчанию для типа функции в качестве типа параметра в Swift 3

Я хочу передать функцию для вызова внутри блока завершения, если мне нужно, но я не знаю, как установить параметр по умолчанию для функции.

 func showAlert(controllerTitle: String, message: String, actionTitle: String, preferredStyle: UIAlertControllerStyle = .alert, actionStyle: UIAlertActionStyle = .default, funcToCall: () -> ()){
     let alert = UIAlertController(title: controllerTitle, message: message, preferredStyle: preferredStyle)
     alert.addAction(UIAlertAction(title: actionTitle, style: actionStyle, handler: {(action) -> Void in 
         funcToCall()
 }))
    self.present(alert, animated: true, completion: {() -> Void in })
 }

3 ответа

Решение

Прежде всего, вопрос должен обеспечивать максимально четкий блок кода.

Вопрос

Итак, у вас есть функция foo который принимает параметр типа замыкания, и вы хотите предоставить default value право?

Решение

Вот код

func foo(completion: ()->() = { _ in print("Default completion") }) {
    completion()
}

тестирование

Теперь вы можете позвонить foo передавая свое собственное закрытие

foo { print("Hello world") } // Hello world

Или используя параметр по умолчанию

foo() // Default completion

Я удалил все параметры из showAlert но funcToCall просто чтобы показать, как вы можете предоставить параметр по умолчанию для функции:

extension UIViewController {

    private static func defaultFuncToCall() {
        //
    }

    func showAlert(funcToCall: @escaping () -> () = UIViewController.defaultFuncToCall) {
        //
    }
}

Вы можете передать параметр по умолчанию в функцию, например, так

func functionToCall(message: String = "You message") {
    print(message)
}
Другие вопросы по тегам