Swift 3 中函数类型的默认参数值作为参数类型
Default Parameter Value for Function Type as Parameter Type in 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 })
}
您可以像这样将默认参数传递给函数
func functionToCall(message: String = "You message") {
print(message)
}
首先,一个问题应该提供尽可能具体的代码块。
问题
那么,您有一个函数 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 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
,它接受一个闭包类型的参数,您想要提供一个 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) {
//
}
}