函数类型的默认参数值作为Swift 3中的参数类型

函数类型的默认参数值作为Swift 3中的参数类型,swift,parameter-passing,default-parameters,function-parameter,Swift,Parameter Passing,Default Parameters,Function Parameter,如果需要,我想在完成块内传递一个要调用的函数,但我不知道如何为函数设置默认参数 func showAlert(controllerTitle: String, message: String, actionTitle: String, preferredStyle: UIAlertControllerStyle = .alert, actionStyle: UIAlertActionStyle = .default, funcToCall: () -> ()){ let ale

如果需要,我想在完成块内传递一个要调用的函数,但我不知道如何为函数设置默认参数

 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 })
 }

您可以将默认参数传递给这样的函数

func functionToCall(message: String = "You message") {
    print(message)
}

首先,问题应该提供尽可能具体的代码块

问题 因此,您有一个函数
foo
,它接受闭包类型的参数,您想提供一个
默认值
对吗

解决方案 这是密码

func foo(completion: ()->() = { _ in print("Default completion") }) {
    completion()
}
测试 现在您可以调用
foo
传递您自己的闭包

foo { print("Hello world") } // Hello world
或者使用默认参数

foo() // Default completion

我已从
showart
中删除了所有参数,但
funcToCall
只是为了说明如何为函数提供默认参数:

extension UIViewController {

    private static func defaultFuncToCall() {
        //
    }

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

还不完全清楚您在问什么–您是否希望为
funcToCall:
参数指定一个默认函数值(该值不起任何作用)?如果是,请进行比较